【问题标题】:Matplotlib bar chart on datetime index values日期时间索引值上的 Matplotlib 条形图
【发布时间】:2020-07-02 18:50:41
【问题描述】:

我无法让以下代码正确显示条形图。该图的线条非常细,在您放大之前是不可见的,即使那样它也不清楚。我尝试使用 plt.bar 的宽度选项进行控制,但它没有做任何事情(例如尝试 0.1、1、365)。

任何关于我做错了什么的指针将不胜感激。

非常感谢

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import matplotlib.dates as mdates

plt.close('all')

mydateparser2 = lambda x: pd.datetime.strptime(x, "%m/%d/%Y")
colnames2=['Date','Net sales', 'Cost of sales']
df2 = pd.read_csv(r'account-test.csv', parse_dates = ['Date'] , date_parser = mydateparser2, index_col='Date')
df2= df2.filter(items=colnames2)
df2 = df2.sort_values('Date')

print (df2.info())
print (df2)

fig = plt.figure()

plt.bar(df2.index.values, df2['Net sales'], color='red', label='Net sales'  )
plt.ylim(500000,2800000)
plt.show()
plt.legend(loc=4)

结果输出(显示数据类型)

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 15 entries, 2005-12-31 to 2019-12-31
Data columns (total 2 columns):
Net sales        15 non-null int64
Cost of sales    15 non-null int64
dtypes: int64(2)
memory usage: 360.0 bytes
None
            Net sales  Cost of sales
Date                                
2005-12-31    1161400         907200
2006-12-31    1193100         928300
2007-12-31    1171100         888100
2008-12-31    1324900        1035700
2009-12-31    1108300         859800
2010-12-31    1173600         891000
2011-12-31    1392400        1050300
2012-12-31    1578200        1171500
2013-12-31    1678200        1224200
2014-12-31    1855500        1346700
2015-12-31    1861200        1328400
2016-12-31    2004300        1439700
2017-12-31    1973300        1421500
2018-12-31    2189100        1608300
2019-12-31    2355700        1715300

【问题讨论】:

  • 感谢您的回复。刚试了一下,还是不行。

标签: python pandas matplotlib


【解决方案1】:

也许您正试图在一个小图上绘制太多条形图。尝试fig = plt.figure(figsize=(12,6) 以获得更大的情节。您也可以将width=0.9 传递给您的bar 命令:

fig, ax = plt.subplots(figsize=(12,6))
df.plot.bar(y='Net sales', width=0.9, ax=ax)  # modify width to your liking

输出:

【讨论】:

  • 这不是我想要的。我需要以条形图格式在 x 轴上绘制日期,在 Y 上绘制“净销售额”列。稍后,我计划将折线图与日期叠加到另一个变量的顶部。
  • 抱歉,应该是 y='Net sales' 而不是 x='Net sales'。查看更新的答案。
  • 谢谢。如果我想在不同的 y 轴刻度上添加折线图,我该怎么做?我尝试使用类似下面的代码但无法传入 ax2 来绘制
    ax2 = ax.twinx() # 设置第二轴
    plt.plot(df1.index.values, df1[ 'GBP'], color='red', label='GBP')
  • 试试df1.plot(y='GBP', color='red', ax=ax2)
  • 谢谢,这让我更进一步。感谢您的耐心。如果第二个数据集 df1 上的 X 轴值(也是日期时间格式)与第一个数据集不同(第二个数据集大得多,但覆盖的范围与第一个数据集相同),这是否也有效?我在下面复制了一个错误,看起来可能是由于一个数据集具有与第一个不同/更多的 x 值? 错误:KeyError:“[列]中没有 [Float64Index([ 1.9055, 1.8952, ... , 1.3079, 1.31215],\n dtype='float64', length=3798)]
猜你喜欢
  • 2020-02-08
  • 2020-04-29
  • 2019-01-05
  • 2011-08-19
  • 2020-07-08
  • 2019-04-13
  • 2021-05-23
  • 2020-03-24
相关资源
最近更新 更多