python - Python - 如何正确地将条形图与线子图对齐?
问题描述
我正在尝试为我的线图绘制样本大小,并且在绘制条形图时,它们没有在 x 轴的适当位置绘制。
attacks = 5
idealdata = fullMatrix(attacks, .5)
actualdata = trueDataM(attacks, 'crit_50')
fig, axs = plt.subplots(attacks+1, sharex=True, sharey=True)
axs2 = [ax.twinx() for ax in axs]
fig.text(0.5, 0.04, 'State', ha='center')
fig.text(0.04, 0.5, 'Probability', va='center', rotation='vertical')
fig.text(.95, .5, 'Sample Size', va = 'center', rotation='vertical')
fig.text(.45, .9, 'Ideal vs. Actual Critical Strike Rate', va='center')
colors = ['red', 'green', 'blue', 'orange', 'purple']*attacks
ys = datasample(attacks, 'crit_50')
fig.set_size_inches(18.5, 10.5)
for i in range(attacks+1):
axs[i].plot(idealdata[i], color=colors[i], marker='o', lw=3)
axs[i].plot(actualdata[i], 'gray', marker='o', lw=3, ls='--')
axs2[i].bar(actualdata[i], ys[i], width=.1, color=colors[i], alpha = .4)
解决方案
问题是条形的 x 轴。在代码actualdata[i]
中用作x
,而对于折线图,没有明确的 x 轴。如果没有明确的 x,ax.plot()
只使用数组索引 (x = 0,1,2, ...)。
这是一些带有模拟数据的测试代码:
import random
from matplotlib import pyplot as plt
attacks = 5
idealdata = [[random.randrange(2, 5) *.1 if abs(i-j) <= 1 else 0 for j in range(attacks+1)] for i in range(attacks+1)]
actualdata = [[idealdata[i][j] + random.uniform(-.1, .1) if idealdata[i][j] > .1 else 0 for j in range(attacks+1)] for i in range(attacks+1)]
fig, axs = plt.subplots(attacks+1, sharex=True, sharey=True)
fig.text(0.5, 0.04, 'State', ha='center')
fig.text(0.04, 0.5, 'Probability', va='center', rotation='vertical')
fig.text(.95, .5, 'Sample Size', va = 'center', rotation='vertical')
fig.text(.45, .9, 'Ideal vs. Actual Critical Strike Rate', va='center')
ys = [[idealdata[i][j] + random.uniform(-.1, .1) if idealdata[i][j] > .1 else 0 for j in range(attacks+1)] for i in range(attacks+1)]
cmap = plt.get_cmap('rainbow')
fig.set_size_inches(18.5, 10.5)
for i in range(attacks+1):
axs[i].plot(idealdata[i], color=cmap(i/attacks), marker='o', lw=3)
axs[i].plot(actualdata[i], 'gray', marker='o', lw=3, ls='--')
axs[i].bar(range(len(ys[i])), ys[i], width=.1, color=cmap(i/attacks))
plt.show()
推荐阅读
- python-2.7 - Pytube 正则表达式匹配错误
- python - combining structured and text data in classification problem using keras
- unity3d - 在 Unity 中使用 Virtualbox
- java - 使用 Gson 解析特定的 JSON
- ios - -canOpenURL:URL 失败:“fbauth2:/” - 错误:“操作无法完成。(OSStatus 错误 -10814。)
- linux - 将输入重定向到后台运行的脚本
- angular - How to get ion-input type date to open calendar when on desktop/core
- javascript - 为什么我不能在对象数组的 for-in 循环中访问对象属性?
- java - 无法在 java 模式匹配中获得正确的输出
- python - 使用 Python 3 将多个 Excel 工作簿和工作表导入单个数据框