这可能是一个非常愚蠢的问题,但是当使用.plot()绘制Pandas DataFrame时,它很快并且会生成带有适当索引的图形。一旦我尝试将其更改为条形图,它似乎就失去了所有格式,并且索引变得疯狂。为什么会这样呢?是否有一种简单的方法可以绘制与折线图相同格式的条形图?
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame()
df['Date'] = pd.date_range(start='01/01/2012', end='31/12/2018')
df['Value'] = np.random.randint(low=5, high=100, size=len(df))
df.set_index('Date', inplace=True)
df.plot()
plt.show()
df.plot(kind='bar')
plt.show()
更新: 为了进行比较,如果我将数据放入Excel中,然后创建一个折线图,然后立即创建一个条形图(“列”),它将转换该图并保持轴标签与折线图相同。如果我尝试用多年的每日数据在Python中生成许多条形图,那将花费很长时间。有没有等效的方法可以在Python中执行此Excel转换?
答案 0 :(得分:2)
熊猫柱状图本质上是分类的;也就是说,每个条形图都是一个单独的类别,并且它们都有自己的标签。熊猫目前无法绘制数字条形图(以与线条图相同的方式)。
相反,如果输入数据是数字或日期,则matplotlib bar
的图是数字的。所以
plt.bar(df.index, df["Value"])
产生
但是请注意,由于数据框中有2557个数据点,这些数据点仅分布在几百个像素上,因此并未实际绘制所有条形图。相反,如果要显示每个小节,则最终图像中的小节必须为一个像素宽。这意味着您的图形每边的5%边距需要超过2800像素宽或矢量格式。
因此,与其显示每日数据,不如将其汇总为每月或每季度数据是有意义的。
答案 1 :(得分:1)
默认的.plot()
用直线连接所有数据点并生成线图。
另一方面,.plot(kind='bar')
将每个数据点绘制为离散条形。为了在x轴上获得正确的格式,必须在绘图后修改刻度标签。