Как сделать гистограмму только с индикатором высоты, не показывающим полный бар? - PullRequest
0 голосов
/ 22 февраля 2019

Этот график выглядит почти неплохо, но, вероятно, он не подходит для моделирования этого в matplotlib.Как получить две горизонтальные полосы, которые простираются влево и вправо от вертикальной линии в точке х, чтобы показать изменение двух наборов данных, например, SDR от 0,7 до 0,25.

В настоящее время я исправляю вещи вместе с маркерами '$-$', которые создают смещенные легенды, и я не могу правильно их разместить.Если я изменю размеры, маркеры начнут смещаться от вертикальной черты в их точке х, например, SDR.

Как правильно моделировать этот тип диаграммы?

enter image description here

layer0 = np.random.random(10)

fig, ax = plt.subplots(1,1, figsize=(15/2,1.5*2.5),)
ind = np.arange(10, dtype=np.float64)*1#cordx

ax.plot(ind[0::2]+0.05, layer0[0::2]-0.04, ls='None', marker='$-$', markersize=40)
ax.plot(ind[1::2]-0.15, layer0[1::2]-0.04, ls='None', marker='$-$', markersize=40)
ax.set_ylim(0,1.05) 
ax.set_yticks(np.arange(0, 1.1, step=0.1))
ax.set_xticks(ind[0::2]+0.5)
ax.set_xticklabels( ('SDR', 'SSR', 'SCR', 'RCR', 'GUR') )
plt.grid(b=True)
plt.grid(color='black', which='major', axis='y', linestyle='--', lw=0.2)
plt.show()

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

В качестве альтернативы вы можете использовать горизонтальную гистограмму barh, которая в этом случае более интуитивна.Здесь ключевым параметром является left, который сместит ваши горизонтальные гистограммы влево / вправо.

Ниже приводится полный ответ:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(2)
layer0 = np.random.random(10)

fig, ax = plt.subplots(1,1, figsize=(15/2,1.5*2.5),)
n = 10
width = 0.5
ind = np.arange(n, dtype=np.float64)*1#cordx

ax.barh(layer0[0::2], [width]*int(n/2), height=0.01, left = ind[0::2])
ax.barh(layer0[1::2], [width]*int(n/2), height=0.01, left = ind[0::2]+width)
ax.set_ylim(0,1.05) 
ax.set_yticks(np.arange(0, 1.1, step=0.1))
ax.set_xticks(ind[0::2]+0.5)
ax.set_xticklabels( ('SDR', 'SSR', 'SCR', 'RCR', 'GUR') )
plt.grid(b=True)
plt.grid(color='black', which='major', axis='y', linestyle='--', lw=0.2)
plt.show()

enter image description here

0 голосов
/ 22 февраля 2019

до сих пор я не думал о гистограммах с нижним смещением, что, кажется, будет в порядке:

layer0 = np.random.random(10)
fig, ax = plt.subplots(1,1, figsize=(15/1.3,1.5*2.5),)# sharey=True)
ind = np.arange(10, dtype=np.float64)*1#cordx
height=0.03
width=0.8
ax.bar(ind[0::2]-width/2, height, width=width, bottom=layer0[0::2]-height)
ax.bar(ind[0::2]+width/2, height, width=width, bottom=layer0[1::2]-height)
ax.set_ylim(-0.,1.05)
plt.grid(color='black', which='major', axis='x', linestyle='-', lw=0.8)

enter image description here

...