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


Posted in Python onJanuary 16, 2018

演示结果:

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

完整代码:

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, nx, 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, bbox,
              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, renderer, *args, **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.2),
         (0.2, 0.2, 0.8),
         (0.7, 0.5, 0.8),
         (0.3, 0.8, 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 相关文章推荐
Python实现感知机(PLA)算法
Dec 20 Python
Python实现决策树C4.5算法的示例
May 30 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
python利用faker库批量生成测试数据
Oct 15 Python
python实现学生通讯录管理系统
Feb 25 Python
Python+matplotlib实现填充螺旋实例
Jan 15 #Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 #Python
wxPython之解决闪烁的问题
Jan 15 #Python
详细解读tornado协程(coroutine)原理
Jan 15 #Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 #Python
Tornado高并发处理方法实例代码
Jan 15 #Python
使用Python实现windows下的抓包与解析
Jan 15 #Python
You might like
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
PHP分页显示制作详细讲解
2006/12/05 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
浅谈箭头函数写法在ReactJs中的使用
2017/08/22 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
python算法演练_One Rule 算法(详解)
2017/05/17 Python
Python下载的11种姿势(小结)
2020/11/18 Python
数据库基础的一些面试题
2012/02/25 面试题
优秀毕业生自我鉴定
2014/02/11 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
计算机专业自荐信
2014/05/24 职场文书
大国崛起英国观后感
2015/06/02 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
小学教师教学反思
2016/02/24 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
Python基础之元编程知识总结
2021/05/23 Python
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android