#python #image #matplotlib #graph
#python #изображение #matplotlib #График
Вопрос:
Итак, ниже приведен фрагмент моего кода, и все это работает нормально. Просто любопытно, можно ли вместо отображаемых полос с определенными цветами применить изображение к панели, например, флаг страны и т. Д. (пожалуйста, игнорируйте мой непоследовательный порядок передачи параметров)
Спасибо
l_images=["australia.png","turkey.png"] # this is desired
l_colors=["pink","blue"]
if (l_bar_dir=="vertical"):
plt.bar(xs2,ys,tick_label=xs,color=l_colors,bottom=bottoms,width=bar_width,align='center') # set plot to be a bar graph
else:
plt.barh(bottom=xs2,width=ys,tick_label=xs,align='center',color=l_colors) # set plot to be a bar graph
Ответ №1:
AFAIK нет встроенного способа сделать это, хотя matplotlib
он допускает штриховки на столбчатых участках. Смотрите, например, hatch_demo.
Но не так уж сложно объединить несколько вызовов plt.imshow
в виде гистограммы. Вот довольно грубая функция, которую можно использовать для создания базовых гистограмм с использованием изображений, используя вашу идею флагов в качестве изображений.
import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import imread
def image_plot(heights, images, spacing=0):
# Iterate through images and data, autoscaling the width to
# the aspect ratio of the image
for i, (height, img) in enumerate(zip(heights, images)):
AR = img.shape[1] / img.shape[0]
width = height * AR
left = width*i spacing*i
right = left width
plt.imshow(img, extent=[left, right, 0, height])
# Set x,y limits on plot window
plt.xlim(0, right)
plt.ylim(0, max(heights)*1.1)
# Read in flag images
usa_flag = imread('american_flag.png')
aussie_flag = imread('australian_flag.png').swapaxes(0, 1)
turkish_flag = imread('turkish_flag.png').swapaxes(0, 1)
# Make up some data about each country
usa_data = 33
aussie_data = 36
turkish_data = 27
data = [usa_data, aussie_data, turkish_data]
flags = [usa_flag, aussie_flag, turkish_flag]
image_plot(data, flags, spacing=2)
Не делая ничего необычного для осей x
и y
, возвращает этот график.