web-dev-qa-db-ja.com

Python Pandas:X軸ラベルとしてデータフレーム列の値を設定する方法

次の形式のデータがあるとします:

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..として表示されます

17
Volatil3

パンダを使用しているため、ティックラベルをDataFrameのplot()メソッドに直接渡すことができるようです。 (docs) 。 (例:df.plot(..., xticks=<your labels>)

さらに、pandasはmatplotlibを使用するため、ラベルをそのように制御できます。

例えば plt.xticks()(example) または ax.set_xticklabels()

回転に関しては、最後の2つのメソッドを使用して、ラベルとともに回転引数を渡すことができます。のようなもの:

ax.set_xticklabels(<your labels>, rotation=0)

強制的に水平に置く必要があります。

11
jedwards

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)

enter image description here

8
MaxU

私はこれについて本当に気に入った答えを見つけるのに苦労しました、以下の機能はそれを非常によく達成し、非常に順応性があります

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)

以下は私の結果の例ですが、データフレームの個別の列の各値に新しい色を設定しています

私の列のタイトルは['A'、 'B'、 'C​​'、 'D'、 'E']

0
nbenz