Matplotlib: построение прозрачной гистограммы с непрозрачным краем

Я рисую гистограмму, и у меня есть три набора данных, которые я хочу собрать вместе, каждый из которых имеет разные цвета и тип линии (пунктир, пунктир и т. Д.). Я также даю некоторую прозрачность, чтобы видеть перекрывающиеся бары.

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

import matplotlib.pyplot as plt import numpy as np x = np.random.random(20) y =np.random.random(20) z= np.random.random(20) fig = plt.figure() ax = fig.add_subplot(111) ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', alpha = 0.5, lw=3, color= 'b') ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', alpha = 0.5, lw=3, color= 'r') ax.hist(z, bins=np.arange(0, 1, 0.1), alpha = 0.5, lw=3, color= 'k') ax.set_xlim(-0.5, 1.5) ax.set_ylim(0, 7) plt.show() 

введите описание изображения здесь

2 Solutions collect form web for “Matplotlib: построение прозрачной гистограммы с непрозрачным краем”

plt.hist принимает дополнительные аргументы ключевых слов, которые передаются конструктору для matplotlib.patches.Patch . В частности, вы можете передать аргумент fc= который позволяет вам установить патч facecolor с помощью кортежа (R, G, B, A) при создании гистограмм. Изменение альфа-значения facecolor не влияет на прозрачность краев:

 ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', lw=3, fc=(0, 0, 1, 0.5)) ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', lw=3, fc=(1, 0, 0, 0.5)) ax.hist(z, bins=np.arange(0, 1, 0.1), lw=3, fc=(0, 0, 0, 0.5)) 

введите описание изображения здесь

Я думаю, что самое туманное решение – самое легкое и лучшее? Просто замените гистограммы без внутреннего цвета и без альфы. Это должно заменить только строки гистограммы.

Кроме того, вы можете исключить вероятность того, что линии / черточки / точки не будут перекрываться, полностью удалив их из первого графика гистограммы

 import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np x = np.random.random(20) y = np.random.random(20) z = np.random.random(20) fig = plt.figure() ax = fig.add_subplot(111) ax.hist(x, bins=np.arange(0, 1, 0.1), edgecolor='None', alpha = 0.5, color= 'b') ax.hist(y, bins=np.arange(0, 1, 0.1), edgecolor='None', alpha = 0.5, color= 'r') ax.hist(z, bins=np.arange(0, 1, 0.1), edgecolor="None", alpha = 0.5, color= 'k') ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', lw=3, facecolor="None") ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', lw=3, facecolor="None") ax.hist(z, bins=np.arange(0, 1, 0.1), lw=3, facecolor="None") plt.show() 

без вторых порядков график должен выглядеть как ваша фигура без каких-либо границ. С нижними 3 гистограммами добавляются границы границ, чтобы создать изображение ниже. Работает на Python3.4 Win7

[cut, потому что, по-видимому, мне не хватает репутации для публикации фотографий]

  • добавление дополнительных осевых тиков с использованием matplotlib
  • matplotlib подключается к событиям home / back / forward button
  • Как установить стек SciPy с помощью pip и homebrew?
  • Ошибка matplotlib.animation. Система не может найти указанный файл.
  • живое обновление с помощью matplotlib
  • Python3.5 backend_tkagg больше не доступен?
  • Получить bbox в координатах данных в matplotlib
  • Как построить линию сетки только с помощью pcolor / pcolormesh
  • Python - лучший язык программирования в мире.