apply images to pyplot python bar graphs

后端 未结 1 1290
情歌与酒
情歌与酒 2021-01-14 19:08

So below is a snippet of my code, and it all works fine. Just curious instead of display bars with specific colors, can an image be applied to the bar, such as a countries f

相关标签:
1条回答
  • 2021-01-14 19:54

    AFAIK there's no built-in way to do this, although matplotlib does allow hatches in bar plots. See for example, hatch_demo.

    But it's not terribly difficult to put together several calls to plt.imshow in the form of a bar plot. Here is a rather crude function that could be used to make basic bar plots using images, using your idea of flags as the images.

    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)
    

    Without doing anything fancy to the x and y axes, returns this plot.

    0 讨论(0)
提交回复
热议问题