gpt4 book ai didi

Matplotlib:组合两个条形图

转载 作者:行者123 更新时间:2023-12-02 01:42:56 24 4
gpt4 key购买 nike

我正在尝试生成类似“ fiddle ”的条形图,但是我遇到了下面描述的几个困难......

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# init data
label = ['aa', 'b', 'cc', 'd']
data1 = [5, 7, 6, 9]
data2 = [7, 3, 6, 1]
data1_minus = np.array(data1)*-1

gs = gridspec.GridSpec(1, 2, top=0.95, bottom=0.07,)
fig = plt.figure(figsize=(7.5, 4.0))

# adding left bar chart
ax1 = fig.add_subplot(gs[0])
ax1.barh(pos, data1_minus)
ax1.yaxis.tick_right()
ax1.yaxis.set_label(label)

# adding right bar chart
ax2 = fig.add_subplot(gs[1], sharey=ax1)
ax2.barh(pos, data2)

violin-like bar chart

  • 无法将“标签”添加为要共享的两个图表的标签。
  • 将两个图之间的标签居中(以及每个条形的垂直中心)
  • 只保留外部 yaxis 上的刻度(而不是内部,标签所在的位置)

最佳答案

如果我正确理解了这个问题,我相信这些更改可以满足您的要求:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# init data
label = ['aa', 'b', 'cc', 'd']
data1 = [5, 7, 6, 9]
data2 = [7, 3, 6, 1]
data1_minus = np.array(data1)*-1

gs = gridspec.GridSpec(1, 2, top=0.95, bottom=0.07,)
fig = plt.figure(figsize=(7.5, 4.0))
pos = np.arange(4)

# adding left bar chart
ax1 = fig.add_subplot(gs[0])
ax1.barh(pos, data1_minus, align='center')

# set tick positions and labels appropriately
ax1.yaxis.tick_right()
ax1.set_yticks(pos)
ax1.set_yticklabels(label)
ax1.tick_params(axis='y', pad=15)

# adding right bar chart
ax2 = fig.add_subplot(gs[1], sharey=ax1)
ax2.barh(pos, data2, align='center')

# turn off the second axis tick labels without disturbing the originals
[lbl.set_visible(False) for lbl in ax2.get_yticklabels()]

plt.show()

这产生了这个情节:combined bar chart

至于保持实际的数字刻度(如果你想要的话),普通的 matplotlib 接口(interface)在轴共享(或孪生)时将刻度非常紧密地联系在一起。但是,axes_grid1 工具包可以让您进行更多控制,因此如果您想要一些数字刻度,可以将上面的整个 ax2 部分替换为以下内容:

from mpl_toolkits.axes_grid1 import host_subplot

ax2 = host_subplot(gs[1], sharey=ax1)
ax2.barh(pos, data2, align='center')
par = ax2.twin()
par.set_xticklabels('')
par.set_yticks(pos)
par.set_yticklabels([str(x) for x in pos])

[lbl.set_visible(False) for lbl in ax2.get_yticklabels()]

产生:combined bar chart with ticks

关于Matplotlib:组合两个条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27406478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com