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实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
Python中的ceil()方法使用教程
May 14 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
Python实现命令行通讯录实例教程
Aug 18 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
浅析python的优势和不足之处
Nov 20 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
python面试题Python2.x和Python3.x的区别
May 28 Python
python变量命名的7条建议
Jul 04 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 Python
利用python清除移动硬盘中的临时文件
Oct 28 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
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
JS backgroundImage控制
2009/05/19 Javascript
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
wxPython学习之主框架实例
2014/09/28 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python切片操作实例分析
2018/03/16 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
python numpy库np.percentile用法说明
2020/06/08 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
婚纱店策划方案
2014/05/22 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
护士年终个人总结
2015/02/13 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers