Python Pandas:如何将数据框列值设置为 X 轴标签

Posted

技术标签:

【中文标题】Python Pandas:如何将数据框列值设置为 X 轴标签【英文标题】:Python Pandas: How to set Dataframe Column value as X-axis labels 【发布时间】:2016-12-05 15:22:04 【问题描述】:

假设我有以下格式的数据:

Region   Men   Women
City1    10   5
City2    50   89

当我在 Dataframe 中加载它并绘制图表时,它会将索引显示为 X 轴标签,而不是 Region 名称。如何获取 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..

【问题讨论】:

plt.xticks() (example) 或 ax.set_xticklabels() 可能值得研究(每个都有链接的文档)。还有xticks 参数可以指定给DataFrame.plot() @jedwards set.xticklabels() 有效,但垂直显示字符串而不是水平显示字符串很奇怪。 比如,标签是旋转的?换句话说,要“正确”阅读它们,您必须转过头?或者标签很窄,每两个字母都换行。 这很奇怪,因为对我来说它默认为水平文本。指定rotation=0 有帮助吗?如set_xticklabels(<your_labels>, rotation=0)? @jedwards 完美!你能把它作为答案吗? 【参考方案1】:

由于您使用的是 pandas,看来您可以将刻度标签直接传递给 DataFrame 的 plot() 方法。 (docs)。 (例如df.plot(..., xticks=<your labels>)

此外,由于 pandas 使用 matplotlib,您可以通过这种方式控制标签。

例如 plt.xticks() (example) 或 ax.set_xticklabels()

关于旋转,最后两种方法允许您将旋转参数与标签一起传递。所以像:

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

应该强制它们水平放置。

【讨论】:

【参考方案2】:

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)

【讨论】:

【参考方案3】:

我很难找到我真正喜欢的答案,下面的函数很好地实现了它,而且适应性很强,

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)

以下是我的结果示例,尽管我为数据框中单独列中的每个值设置了新颜色

My columns were titled ['A','B','C','D','E']

【讨论】:

以上是关于Python Pandas:如何将数据框列值设置为 X 轴标签的主要内容,如果未能解决你的问题,请参考以下文章

数据框列值映射

如何使用 Plotly 在 Python 中使用 Pandas 数据框列设置散点图悬停信息

(Python)如何修复数据框列值中的数值表示错误

如何将 pandas 数据框列转换为本机 python 数据类型?

使用 pandas 数据框列值来透视其他列

如何在 df.groupby 之后将数据框列值作为窗口大小传递?