【问题标题】:Bars in matplotlib bar chart are not the same width?matplotlib条形图中的条形宽度不一样?
【发布时间】:2020-07-12 22:12:53
【问题描述】:

我试图使用 matplotlib 和 pandas 创建一个条形图,显示美国 COVID-19 病例的每日变化。

  import pandas as pd
  import matplotlib.pyplot as plt

  data = pd.read_csv('https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv')
  display(data.head(10))
  df = data.groupby('date').sum()
  df['index'] = range(len(df))
  df['IsChanged'] = df['cases'].diff() 


  df.at['2020-01-21', 'IsChanged'] = 0.0

  x = df['index']
  z = df['IsChanged']

  plt.figure(figsize=(20,10))
  plt.grid(linestyle='--')
  plt.bar(x,z)
  plt.show()

我得到的图表如下所示:

图表条的宽度不均匀。我尝试设置一个特定的宽度,但没有奏效。有没有办法解决这个问题?

【问题讨论】:

  • 对于这么窄的酒吧,我会使用Axes.stem

标签: python pandas matplotlib


【解决方案1】:

这可以通过指定分辨率来解决。例如,尝试设置dpi=300。答案中的图表是您的代码中指定 DPI 的输出图像。

plt.figure(figsize=(20,10),dpi=300)

【讨论】:

  • 这行得通。谢谢。我只是好奇是否有办法让情节变小。这使它变大了,因此,当您不放大时,它会变得有点模糊。
【解决方案2】:

虽然这不能直接回答您的问题,但当条形图有很多条时,可能需要考虑 plt.fill_between()。 (因为如果你不能区分条形,那么条形图就失去了它的目的)

例如

plt.fill_between(x, 0, z, step='mid', facecolor=(0.3, 0.3, 0.45 ,.4), edgecolor=(0, 0, 0, 1))
plt.grid(ls= ':', color='#6e6e6e', lw=0.5);

甚至:

plt.fill_between(x, 0, z, facecolor=(0.3, 0.3, 0.45 ,.4), edgecolor=(0, 0, 0, 1))
plt.grid(ls= ':', color='#6e6e6e', lw=0.5);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2019-10-31
    • 2013-03-22
    相关资源
    最近更新 更多