次の形式のデータがあるとします:
Region Men Women
City1 10 5
City2 50 89
Dataframeに読み込んでグラフをプロットすると、Region
nameではなく、X軸ラベルとしてインデックスが表示されます。 X軸で名前を取得するにはどうすればよいですか?
これまで私は試しました:
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
ax = df[['Men','Women']].plot(kind='bar', title ="Population",figsize=(15,10),legend=True, fontsize=12)
ax.set_xlabel("Areas",fontsize=12)
ax.set_ylabel("Population",fontsize=12)
plt.show()
現在、xティックは0,1,2..
として表示されます
パンダを使用しているため、ティックラベルをDataFrameのplot()
メソッドに直接渡すことができるようです。 (docs) 。 (例:df.plot(..., xticks=<your labels>)
)
さらに、pandasはmatplotlibを使用するため、ラベルをそのように制御できます。
例えば plt.xticks()
(example) または ax.set_xticklabels()
回転に関しては、最後の2つのメソッドを使用して、ラベルとともに回転引数を渡すことができます。のようなもの:
ax.set_xticklabels(<your labels>, rotation=0)
強制的に水平に置く必要があります。
plot.bar() メソッドは、引数を plot() から継承します。この引数にはrot
引数があります。
ドキュメントから:
rot:int、デフォルトなし
目盛りの回転(垂直の場合はxticks、水平の場合はyticks)
また、デフォルトのインデックスごとにx軸の目盛りとして使用します。
use_index:ブール値、デフォルトはTrue
X軸の目盛りとしてインデックスを使用
In [34]: df.plot.bar(x='Region', rot=0, title='Population', figsize=(15,10), fontsize=12)
Out[34]: <matplotlib.axes._subplots.AxesSubplot at 0xd09ff28>
または、明示的にインデックスを設定することもできます-マルチレベルインデックス(軸)に役立つ場合があります。
df.set_index('Region').plot.bar(rot=0, title='Population', figsize=(15,10), fontsize=12)
私はこれについて本当に気に入った答えを見つけるのに苦労しました、以下の機能はそれを非常によく達成し、非常に順応性があります
def plot_vals_above_titles(data_frame, columns):
import random
y_vals = {}
fig = plt.figure()
plt.grid(True)
for index, row in data_frame.iterrows():
x_coord = 0
for col in columns:
# add some jitter to move points off vertical line
jitter = random.uniform(-0.1,.1)
x_coord += jitter
plt.scatter(
x = x_coord,
y = row[col]
)
x_coord -= jitter
x_coord+=1
# rename the xticks with column names
x_vals = range(0, len(columns))
plt.xticks(x_vals, columns)
以下は私の結果の例ですが、データフレームの個別の列の各値に新しい色を設定しています