加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > C语言 > 正文

python+matplotlib实现礼盒柱状图实例代码

发布时间:2020-12-15 01:06:09 所属栏目:C语言 来源:网络整理
导读:演示结果: 完整代码: import matplotlib.pyplot as pltimport numpy as npfrom matplotlib.image import BboxImagefrom matplotlib._png import read_pngimport matplotlib.colorsfrom matplotlib.cbook import get_sample_dataclass RibbonBox(object): o

演示结果:

完整代码:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.image import BboxImage

from matplotlib._png import read_png
import matplotlib.colors
from matplotlib.cbook import get_sample_data


class RibbonBox(object):

  original_image = read_png(get_sample_data("Minduka_Present_Blue_Pack.png",asfileobj=False))
  cut_location = 70
  b_and_h = original_image[:,:,2]
  color = original_image[:,2] - original_image[:,0]
  alpha = original_image[:,3]
  nx = original_image.shape[1]

  def __init__(self,color):
    rgb = matplotlib.colors.to_rgba(color)[:3]

    im = np.empty(self.original_image.shape,self.original_image.dtype)

    im[:,:3] = self.b_and_h[:,np.newaxis]
    im[:,:3] -= self.color[:,np.newaxis]*(1. - np.array(rgb))
    im[:,3] = self.alpha

    self.im = im

  def get_stretched_image(self,stretch_factor):
    stretch_factor = max(stretch_factor,1)
    ny,nx,nch = self.im.shape
    ny2 = int(ny*stretch_factor)

    stretched_image = np.empty((ny2,nch),self.im.dtype)
    cut = self.im[self.cut_location,:]
    stretched_image[:,:] = cut
    stretched_image[:self.cut_location,:] = 

      self.im[:self.cut_location,:]
    stretched_image[-(ny - self.cut_location):,:] = 

      self.im[-(ny - self.cut_location):,:]

    self._cached_im = stretched_image
    return stretched_image


class RibbonBoxImage(BboxImage):
  zorder = 1

  def __init__(self,bbox,color,cmap=None,norm=None,interpolation=None,origin=None,filternorm=1,filterrad=4.0,resample=False,**kwargs
         ):

    BboxImage.__init__(self,cmap=cmap,norm=norm,interpolation=interpolation,origin=origin,filternorm=filternorm,filterrad=filterrad,resample=resample,**kwargs
              )

    self._ribbonbox = RibbonBox(color)
    self._cached_ny = None

  def draw(self,renderer,*args,**kwargs):

    bbox = self.get_window_extent(renderer)
    stretch_factor = bbox.height / bbox.width

    ny = int(stretch_factor*self._ribbonbox.nx)
    if self._cached_ny != ny:
      arr = self._ribbonbox.get_stretched_image(stretch_factor)
      self.set_array(arr)
      self._cached_ny = ny

    BboxImage.draw(self,**kwargs)


if 1:
  from matplotlib.transforms import Bbox,TransformedBbox
  from matplotlib.ticker import ScalarFormatter

  # Fixing random state for reproducibility
  np.random.seed(19680801)

  fig,ax = plt.subplots()

  years = np.arange(2004,2009)
  box_colors = [(0.8,0.2,0.2),(0.2,0.8,0.8),(0.7,0.5,(0.3,0.7),]
  heights = np.random.random(years.shape) * 7000 + 3000

  fmt = ScalarFormatter(uSEOffset=False)
  ax.xaxis.set_major_formatter(fmt)

  for year,h,bc in zip(years,heights,box_colors):
    bbox0 = Bbox.from_extents(year - 0.4,0.,year + 0.4,h)
    bbox = TransformedBbox(bbox0,ax.transData)
    rb_patch = RibbonBoxImage(bbox,bc,interpolation="bicubic")

    ax.add_artist(rb_patch)

    ax.annotate(r"%d" % (int(h/100.)*100),(year,h),va="bottom",ha="center")

  patch_gradient = BboxImage(ax.bbox,interpolation="bicubic",zorder=0.1,)
  gradient = np.zeros((2,2,4),dtype=float)
  gradient[:,:3] = [1,1,0.]
  gradient[:,3] = [[0.1,0.3],[0.3,0.5]] # alpha channel
  patch_gradient.set_array(gradient)
  ax.add_artist(patch_gradient)

  ax.set_xlim(years[0] - 0.5,years[-1] + 0.5)
  ax.set_ylim(0,10000)

  fig.savefig('ribbon_box.png')
  plt.show()

总结

以上就是本文关于python+matplotlib实现礼盒柱状图实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • Python使用Matplotlib实现Logos设计代码
  • python+matplotlib绘制简单的海豚(顶点和节点的操作)
  • Python+matplotlib+numpy绘制精美的条形统计图
  • Python+matplotlib+numpy实现在不同平面的二维条形图
  • python+matplotlib演示电偶极子实例代码
  • python+matplotlib实现鼠标移动三角形高亮及索引显示
  • Python+matplotlib实现填充螺旋实例
  • Python使用matplotlib填充图形指定区域代码示例

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读