将x和y标签添加到熊猫图


195

假设我有以下代码使用pandas绘制了一些非常简单的图形:

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 的包装没有采用任何特定于此的参数。

Answers:


326

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()over 的其他简洁性,plt.plot()使它变得更加简洁而不需要调用就显得很有道理ax.set_ylabel()
克里斯比(Chrispy)2014年

当我这样做时ax.set_ylabel("y label"),它返回一个错误 'list' object is not callable。任何想法?
Ledger Yu

有趣。我不知道它是否取决于版本,但我必须这样做ax.axes.set_ylabel("y label")
Ledger Yu

2
我认为您可以ax.set(xlabel='...)在此答案中放较高的位置,因为它可能会在图表中遗漏。设置两个轴确实是最简洁的方法,这是常见的用例。
poulter7

您如何设置位置?
奥迪塞奥

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()之前而不是之前调用etc ,因为否则您将获得两个图-调用将修改“上一个”图。同样的道理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绘图方法不同。我不知道为什么它们都(不包括set方法)不返回图对象或至少从其继承的对象。
容错

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

pandas使用matplotlib基本数据帧图。因此,如果您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') 

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.