如何在刻度线之间对齐条形图中的条形(matplotlib)?

软木塞色marengo

我需要将绘图中的条对齐以位于matplotlib中x轴刻度线之间的中心。我尝试使用该选项align='edge'将条形图移动到刻度线的边缘,但不会在刻度线之间对齐,我也不愿意加宽条形图,以免条形图之间没有空白。

我有以下形式的数据:

import matplotlib.pyplot as plt    
import numpy as np    
data = np.asarray([['7 Jan.',  60000],
                   ['14 Jan.', 37000],
                   ['21 Jan.', 32000]])

我想用它制作条形图:

x = data[:, 0]
y = data[:, 1].astype(np.int)
plt.bar(x, y, width=0.7, color='#A90000')
plt.show()

产生:

在此处输入图片说明

另外,本教程似乎解决了这个问题,但是我无法编写代码。任何帮助表示赞赏。

认真的重要性

您正在绘制分类数据。那是一些像这样的字符串["Apple", "Banana", "Cherry"]现在,如果您要在类别之间插入条形,则还不清楚是什么单位。"Apple"之间的距离是"Banana"多少?也许"Aubergine"吧?但是一个人不知道。

因此,最好放弃分类图。现在,您当然可以将类别映射到数字。因此,第一个类别对应于0,第二个类别对应于1等等。然后很容易将条形图放置在的中间位置0.5, 1.5, ...

import matplotlib.pyplot as plt    
import numpy as np    
data = np.asarray([['7 Jan.',  60000],
                   ['14 Jan.', 37000],
                   ['21 Jan.', 32000]])

cats = data[:, 0]
x = np.arange(len(cats)) + 0.5
y = data[:, 1].astype(np.int)

plt.bar(x, y, width=0.7, color='#A90000')
plt.xticks(x-0.5, cats)
plt.show()

在此处输入图片说明

尽管不知何故,该图似乎仍缺少最后一个标签,而该标签根本不在列表中。当然,您可以根据需要手动添加它。

另一种方法是使用实​​际日期。由于您的类别实际上对应于可能的日期。

from datetime import datetime
import matplotlib.pyplot as plt    
import numpy as np    
data = np.asarray([['7 Jan.',  60000],
                   ['14 Jan.', 37000],
                   ['21 Jan.', 32000]])

# convert categories to dates
xt = [datetime.strptime(d, "%d %b.") for d in data[:, 0]]
# assume all dates are equally spaced
dt = (xt[1] - xt[0])/2
# get bar positions by adding half the interval to each date
x = [tp + dt for tp in xt]

y = data[:, 1].astype(np.int)

plt.bar(x, y, width=(0.7*2*dt).days, color='#A90000')
plt.xticks(xt, data[:, 0])
plt.show()

生成的图在视觉上与上面的图完全相同,但是,x轴现在以日期时间为单位。这允许使用代码和格式化程序,而不是手动放置代码和标签。

import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt  
import matplotlib.dates as mdates


data = np.asarray([['7 Jan.',  60000],
                   ['14 Jan.', 37000],
                   ['21 Jan.', 32000]])

# convert categories to dates
xt = [datetime.strptime(d, "%d %b.") for d in data[:, 0]]
# assume all dates are equally spaced
dt = (xt[1] - xt[0])/2
# get bar positions by adding half the interval to each date
x = [tp + dt for tp in xt]

y = data[:, 1].astype(np.int)

plt.bar(x, y, width=(0.7*2*dt).days, color='#A90000')
plt.gca().xaxis.set_major_locator(mdates.WeekdayLocator(mdates.SU, interval=1))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%d %b %Y"))
plt.show()

在此处输入图片说明

现在,标签对应于实际日期,可以用所需的方式对其进行格式化。您会注意到这里的日期是从1900年开始的,因此我们需要在每个星期日显示标签(因为1900年1月7日是星期日)。您可能需要将实际年份添加到数据中,以使此图变得正确。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何命令条形图放置在刻度线之间?

如何消除Matplotlib条形图中的条形之间的间隙

如何在matplotlib pyplot条形图中反转条形大小?

如何在Python(Pandas或matplotlib)的条形图中移动对数轴刻度位置(对于10)

如何增加matplotlib条形图中误差线的粗细?

如何在ZingChart中的折线图和条形图之间对齐垂直参考线?

如何在 matplotlib 中反转条形图上的刻度顺序?

如何在条形图中的误差线和条之间进行颜色叠加?

情节:如何在条形图中添加趋势线?

matplotlib条形图中条形之间的空间太大

如何在 Matplotlib 图中单独标记条形图?

如何在 matplotlib 条形图中放置颜色?

如何解决 d3在条形图中X轴上的刻度线数?

如何在条形图的条形图中显示值?

使堆积条形图中的条形线加粗

如何控制条形图中的条形之间的距离

如何减少格子条形图中的条形之间的宽度?

如何减少分组条形图中条形之间的填充?

如何控制seaborn条形图中条形之间的空白?

如何在matplotlib日期条形图中的某个日期之后为所有条形着色

如何在matplotlib条形图中的条形上方显示Y值?

如何在 matplotlib 条形图中区分特定的 x 条形颜色?

matplotlib条形图中极限处的误差线

在堆叠的条形图中绘制不同元素之间的线

R:条形图中的x轴-条形图中间的x轴和中心刻度线的宽度

在水平堆叠的条形图中对齐值标签(Matplotlib)

R Plotly:如何在水平反转的条形图中更改刻度文本的位置?

Matplotlib的条形图中条形上方的值

d3中条形图的轴和矩形刻度线的刻度未对齐