パンダのプロットにxとyのラベルを追加する


195

パンダを使用して非常に単純なものをプロットする次のコードがあるとします。

import pandas as pd
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10, 
         title='Video streaming dropout by category')

出力

特定のカラーマップを使用する機能を維持しながら、xラベルとyラベルを簡単に設定するにはどうすればよいですか?plot()pandas DataFrames のラッパーは、それに固有のパラメーターを取りません。

回答:


327

df.plot()この関数は返すmatplotlib.axes.AxesSubplotオブジェクトを。そのオブジェクトにラベルを設定できます。

ax = df2.plot(lw=2, colormap='jet', marker='.', markersize=10, title='Video streaming dropout by category')
ax.set_xlabel("x label")
ax.set_ylabel("y label")

ここに画像の説明を入力してください

それとも、もっと簡潔に:ax.set(xlabel="x label", ylabel="y label")

または、インデックスのx軸ラベルには、インデックス名がある場合は自動的に設定されます。df2.index.name = 'x label'あまりにもうまくいくでしょう。


71
xおよびyラベルを引数として追加できない特別な理由はありpd.plot()ますか?pd.plot()以上の追加の簡潔さを考えると、呼び出す必要はplt.plot()なく、より簡潔にする方が理にかなっているようax.set_ylabel()です。
クリスピー2014

私がしたときax.set_ylabel("y label")、それはエラーを返します 'list' object is not callable。何か案が?
元帳Yu

面白い。バージョンに依存しているかどうかはわかりませんが、そうする必要がありますax.axes.set_ylabel("y label")
元帳Yu

2
ax.set(xlabel='...)この回答はグラフを過ぎて見落とされる可能性があるため、この回答を高くすることができます。これは、両方の軸を設定するための最も簡潔なアプローチであり、一般的な使用例です。
poulter7 2017年

場所をどのように設定しますか?
Odisseo

43

あなたはこのようにそれを使うことができます:

import matplotlib.pyplot as plt 
import pandas as pd

plt.figure()
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10,
         title='Video streaming dropout by category')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.show()

明らかに、文字列 'xlabel'と 'ylabel'を希望の文字列に置き換える必要があります。


また、前ではなくplt.xlabel()df.plot()になどを呼び出さなければならないことに注意してください。そうしないと、2つのプロットが表示されます-呼び出しによって「前の」プロットが変更されます。同じことが当てはまりplt.title()ます。
Tomasz Gandor

30

DataFrameの列とインデックスにラベルを付けると、パンダは適切なラベルを自動的に提供します。

import pandas as pd
values = [[1, 2], [2, 5]]
df = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                  index=['Index 1', 'Index 2'])
df.columns.name = 'Type'
df.index.name = 'Index'
df.plot(lw=2, colormap='jet', marker='.', markersize=10, 
        title='Video streaming dropout by category')

ここに画像の説明を入力してください

この場合でも、手動でyラベルを指定する必要があります(たとえば、plt.ylabel他の回答に示されているように)。


現在、「DataFrameからの自動供給」は機能しません。私は試してみました(pandasバージョン0.16.0、matplotlib 1.4.3)。プロットは正しく生成されますが、軸にラベルはありません。
szeitlin

1
@szeitlinパンダのgithubページにバグレポートを提出していただけませんか?github.com/pydata/pandas/issues
shoyer

今日は少なくともxlabelが機能しています。たぶん、昨日使っていたデータフレームに何か奇妙なことがあったのでしょうか(?)。再現できればファイリングします!
szeitlin 2015

20

axis.set関数と一緒に両方のラベルを設定することが可能です。例を探します:

import pandas as pd
import matplotlib.pyplot as plt
values = [[1,2], [2,5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])
ax = df2.plot(lw=2,colormap='jet',marker='.',markersize=10,title='Video streaming dropout by category')
# set labels for both axes
ax.set(xlabel='x axis', ylabel='y axis')
plt.show()

ここに画像の説明を入力してください


3
.set(xlabel='x axis', ylabel='y axis')set_xlabelおよびset_ylabelプロットメソッドとは異なり、すべてを1行に入れることができるため、このソリューションが気に入っています。それらすべて(ちなみに、setメソッドを含む)がplotオブジェクトまたは少なくともそれから継承されたものを返さないのはなぜでしょうか。
フォールトトレラントな

14

使用する場合pandas.DataFrame.hist

plt = df.Column_A.hist(bins=10)

プロットではなく、プロットの配列を取得することに注意してください。したがって、xラベルを設定するには、次のようにする必要があります。

plt[0][0].set_xlabel("column A")

10

どう...

import pandas as pd
import matplotlib.pyplot as plt

values = [[1,2], [2,5]]

df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])

(df2.plot(lw=2,
          colormap='jet',
          marker='.',
          markersize=10,
          title='Video streaming dropout by category')
    .set(xlabel='x axis',
         ylabel='y axis'))

plt.show()

2

pandasmatplotlib基本的なデータフレームプロットに使用します。したがって、pandas基本的なプロットに使用している場合は、matplotlibを使用してプロットをカスタマイズできます。ただし、ここでは、を使用seabornして、の基本レベルに移行せずにプロットをさらにカスタマイズできる別の方法を提案しますmatplotlib

作業コード:

import pandas as pd
import seaborn as sns
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
ax= sns.lineplot(data=df2, markers= True)
ax.set(xlabel='xlabel', ylabel='ylabel', title='Video streaming dropout by category') 

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.