我正在使用matplotlib plot
命令在python中绘制一个pandas系列(即series.plot()
,其中series
是我的系列)。该系列的一部分如下:
(1, 1.1] 0.000000
(1.1, 1.2] 0.000000
(1.2, 1.3] 0.000000
(1.3, 1.4] 0.003115
(1.4, 1.5] 0.002625
(1.5, 1.6] 0.000000
(1.6, 1.7] 0.001464
... ...
(4.9, 5.0] 0.737385
Name: series, dtype: float64
我的数据框的图是shown here(在这种情况下是红线)。我希望x轴从1.0到5.0而不是显示bin类别。我怎样才能做到这一点?使用plt.xticks
似乎无效。
答案 0 :(得分:1)
根据我们的讨论,您的系列的索引是一系列间隔,例如。 '(1,1.1]'
是系列中第一个项目的索引。
我能够使用以下代码重现您的问题:
import pandas as pd
import numpy as np
x1 = np.arange(0,5,.1)
x2 = np.arange(0.1,5.1,.1)
y = x1**2
df = pd.DataFrame(np.vstack((x1,x2,y)).T, columns=['x1','x2','y'])
df['xRange'] = '(' + df.x1.map(str) + ', ' + df.x2.map(str) + ']'
series = df.set_index('xRange', drop=True)['y']
series.plot()
要仅使用 series
对象正确标记标记,您需要关闭索引并拉出间隔的第一部分。
您可以通过以下方式恢复数据帧以进行绘图:
new_df = pd.DataFrame(series)
new_index = series.index.map(lambda s: float(s.split(',')[0].replace('(','')))
new_df.set_index(new_index, inplace=True)
new_df.plot()
答案 1 :(得分:0)
这个系列来自哪里?通常,我有一个连续值列X
和Y
的大数据框,然后根据X-bins
值定义X
。之后,按X-bins
分组以计算Y
的平均值(或加权平均值,或总和,或任何其他聚合函数)以获得与您类似的系列。如果是这种情况,我建议在此过程中计算X
的平均值,并针对平均X
而不是X-bins
进行绘图。这比采用左/右端点或箱的中点进行绘图更精确。如,
df['Xbin'] = pd.cut(df['X'], np.arange(0,10,0.1))
而不是
ser = df.groupby('Xbin')['Y'].mean()
ser.plot()
DO
df2 = df.groupby('Xbin')[['X','Y']].mean()
df2.plot(x='X', y='Y')