Проблема в оси 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()
Используя actualdata[i]
в качестве оси X: ![before](https://i.stack.imgur.com/K5S41.png)
Используя range(len(ys[i])
в качестве оси X: ![after](https://i.stack.imgur.com/qs81P.png)