Как нарисовать сетку на гистограмме, созданной с помощью plt.vlines () - PullRequest
0 голосов
/ 04 марта 2020

Я хочу создать гистограмму в python. Я хочу, чтобы этот сюжет был красивым, и мне не нравится внешний вид функции python axes.bar(). Поэтому я решил использовать plt.vlines(). Проблема здесь в том, что мои x-данные - это список, который содержит строки, а не числовые данные. Когда я строю график, расстояние между двумя столбцами (в моем примере столбец 2 = 0) довольно большое:

enter image description here

Кроме того, я хочу сетка. Тем не менее, я хотел бы также иметь незначительные линии сетки. Я знаю, как получить все это, если мои данные были числовыми. Но так как мои x-данные содержат строки, я не знаю, как установить x_max. Есть предложения?

1 Ответ

1 голос
/ 04 марта 2020

Внутренне, позиции меток пронумерованы 0,1, ... Так что установка x-пределов немного перед 0 и после последней показывает их более центрированными.

Обычно бары рисуются с их «ногами» на земле, которые можно установить с помощью plt.ylim(0, ...). Незначительные тики могут быть расположены, например, с кратностью 0,2. Установка длины тиков на ноль позволяет подсчитывать позиции для сетки, но подавляет тиковую метку.

from matplotlib import pyplot as plt
from matplotlib.ticker import MultipleLocator
import numpy as np

labels = ['Test 1', 'Test 2']
values = [1, 0.7]

fig, ax = plt.subplots()
plt.vlines(labels, 0, values, colors='dodgerblue', alpha=.4, lw=7)

plt.xlim(-0.5, len(labels) - 0.5)  # add some padding left and right of the bars
plt.ylim(0, 1.1)  # bars usually have their 0 at the bottom

ax.xaxis.set_minor_locator(MultipleLocator(.2))
plt.tick_params(axis='x', which='both', length=0) # ticks not shown, but position serves for gridlines
plt.grid(axis='both', which='both', ls=':') # optionally set the linestyle of the grid

plt.show()

resulting plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...