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 数据框列设置散点图悬停信息