当我们谈论Python中的数据可视化,Matplotlib是一个不可或缺的库。它强大的功能和灵活性使我们能够以各种方式轻松地呈现数据。然而,有时候,我们可能会忽视Matplotlib在创建视觉上令人惊叹的图像方面的潜力。在本文中,我们将探讨如何使用Matplotlib绘制出吸引人的、有趣的和美观的图像。

圆环图中间带有文字

我们可以在双层圆环图当中放置文字来代表关键的信息,例如我们整体的业绩指标,通过该图可以来显示目前已经达到的进度,代码如下

import matplotlib.pyplot as plt
import pandas as pd
import numpy as npactual_value = 45
target_value = 120
remaining_value = target_value - actual_valuecolours = ['#3da9d4', '#063b63']fig = plt.figure(figsize=(10,10), facecolor='#25253c')
ax = fig.add_subplot(1,1,1)pie = ax.pie([55, 45], colors=colours, startangle=90, labeldistance=1.15, counterclock=False)pie[0][1].set_alpha(0.4)# 添加内圆环
centre_circle = plt.Circle((0, 0), 0.6, fc='#25253c')# Adding the circles to the chart
fig.gca().add_artist(centre_circle)# 添加文字
centre_text = f'${actual_value}K'
centre_text_line_2 = f'Total Revenue'ax.text(0,0.1, centre_text, horizontalalignment='center', verticalalignment='center', fontsize=44, fontweight='bold',color='white')
ax.text(0,-0.1, centre_text_line_2, horizontalalignment='center', verticalalignment='center', fontsize=20, fontweight='bold',color='grey')plt.show()

output

从上面出来的结果中我们可以看到整个圆环代表的是整体的目标,也就是45K的整体业绩指标,可以看到直观的看到目前所处的进度,即55%,以及还未完成的部分,即45%。圆环中间我们也可以添加文字,来更加直观对整个图表做一个说明

甘特图

甘特图基本上是应用在项目管理当中,提供关于项目进度的相关内容,包括了

  • 哪些项目是已经完成了的

  • 哪些项目还未完成,当下的进度是如何

  • 项目原定计划的周期

  • 等等

当然除了Matplotlib之外还有其他的模块也能够来绘制甘特图,小编之前也写了一篇相关的教程

【原创】用Python来绘制甘特图并制作可视化大屏,太方便了!!

而用Matplotlib模块绘制甘特图的详细的代码如下

import datetime
import matplotlib.pyplot as plt
from matplotlib.dates import datestr2num, DateFormatter, DayLocator
from matplotlib.ticker import AutoMinorLocator
from matplotlib.patches import Patch# 创建假数据
tasks = ['Task A', 'Task B', 'Task C', 'Task D', 'Task E', 'Task F', 'Task G', 'Task H', 'Task I', 'Task J']
start_dates = ['2023-02-25', '2023-03-10', '2023-03-13', '2023-03-23', '2023-04-01', '2023-04-05', '2023-04-12', '2023-04-20', '2023-04-24', '2023-05-02']
end_dates = ['2023-03-03', '2023-03-17', '2023-03-22', '2023-03-30', '2023-04-07', '2023-04-18', '2023-04-23', '2023-04-25', '2023-05-03', '2023-05-07']# 创建项目的开始与结束时间
start_dates = [datestr2num(d) for d in start_dates]
end_dates = [datestr2num(d) for d in end_dates]durations = [(end - start) for start, end in zip(start_dates, end_dates)]fig, ax = plt.subplots(figsize=(15, 8), facecolor='#25253c')ax.set_facecolor('#25253c')# 根据类目的不同来设定不同的颜色
colors = ['#7a5195', '#ef5675', '#ffa600']
task_colors = [colors[0]] * 3 + [colors[1]] * 4 + [colors[2]] * 3# 展示柱状图
ax.barh(y=tasks, width=durations, left=start_dates,
height=0.8, color=task_colors)ax.invert_yaxis()# X轴的坐标
ax.set_xlim(start_dates[0], end_dates[-1])date_form = DateFormatter("%Y-%m-%d")
ax.xaxis.set_major_formatter(date_form)ax.xaxis.set_major_locator(DayLocator(interval=10))
ax.xaxis.set_minor_locator(AutoMinorLocator(5))
ax.tick_params(axis='x', which='minor', length=2, color='white', labelsize=6)ax.get_yaxis().set_visible(False)ax.grid(True, axis='x', linestyle='-', color='#FFFFFF', alpha=0.2, which='major')
ax.grid(True, axis='x', linestyle='-', color='#FFFFFF', alpha=0.05, which='minor')
ax.set_axisbelow(True)# 给每一个任务添加注释
for i, task in enumerate(tasks):ax.text(start_dates[i], i, f'  {task}', ha='left', va='center', color='white', fontsize=12, fontweight='bold')# 添加时间轴
today = datetime.datetime.now().strftime("%Y-%m-%d")
today_num = datestr2num(today)
ax.axvline(today_num, color='red', alpha=0.8)# X轴的注释和标题设置
ax.tick_params(axis='both', colors='white')ax.set_xlabel('Date', color='white', fontsize=12)
ax.set_title('Project Schedule', color='white', fontsize=14)# 横轴和纵轴隐藏
ax.spines['left'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)# 分类标注出来
legend_elements = [Patch(facecolor=colors[0], label='Planning'),Patch(facecolor=colors[1], label='Development'),Patch(facecolor=colors[2], label='Testing'),
]# 添加注释
ax.legend(handles=legend_elements, loc='upper right', facecolor='white', edgecolor='white', fontsize=10, title='Phases', title_fontsize=12, frameon=True)plt.show()

output

从结果中我们可以看到每条任务的开始与结束的时间,以及所处的不同的状态,有计划中的任务、开发中的任务以及测试中的任务等等,基于当下的时间我们正处于哪项任务。

环状条形图

最后介绍一下环状条形图,整体效果会更加的惊艳,但是可读性和前面二者相比可能会稍差一些,代码如下

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np# 创建假数据
lith_dict = {'LITH': ['Shale', 'Sandstone', 'Sandstone/Shale', 'Chalk', 'Limestone', 'Marl', 'Tuff'],'PERCENTAGE': [40,65, 40, 35, 40, 70, 50]}
# 变成DataFrame格式
df = pd.DataFrame.from_dict(lith_dict)max_value_full_ring = max(df['PERCENTAGE'])ring_colours = ['#003f5c', '#374c80', '#7a5195','#bc5090','#ef5675','#ff764a','#ffa600']ring_labels =  [f'{x} ({v})' for x, v in zip(list(df['LITH']), list(df['PERCENTAGE']))]
data_len = len(df)
# 创建一个画布出来
fig = plt.figure(figsize=(10,10), facecolor='#393d5c')rect = [0.1,0.1,0.8,0.8]ax_cart = fig.add_axes(rect, facecolor='#25253c')
ax_cart.spines[['right', 'top', 'left', 'bottom']].set_visible(False)
ax_cart.tick_params(axis='both', left=False, bottom=False, labelbottom=False, labelleft=False)ax_polar_bg = fig.add_axes(rect, polar=True, frameon=False)
ax_polar_bg.set_theta_zero_location('N')
ax_polar_bg.set_theta_direction(1)for i in range(data_len):ax_polar_bg.barh(i, max_value_full_ring*1.5*np.pi/max_value_full_ring, color='grey', alpha=0.1)
# 隐藏掉所有的横轴纵轴
ax_polar_bg.axis('off')ax_polar = fig.add_axes(rect, polar=True, frameon=False)
ax_polar.set_theta_zero_location('N')
ax_polar.set_theta_direction(1)
ax_polar.set_rgrids([0, 1, 2, 3, 4, 5, 6], labels=ring_labels, angle=0, fontsize=14, fontweight='bold',color='white', verticalalignment='center')# 遍历所有的数据,然后绘制柱状图
for i in range(data_len):ax_polar.barh(i, list(df['PERCENTAGE'])[i]*1.5*np.pi/max_value_full_ring, color=ring_colours[i])ax_polar.grid(False)
ax_polar.tick_params(axis='both', left=False, bottom=False, labelbottom=False, labelleft=True)plt.show()

output

总之,Matplotlib不仅仅是一个功能强大的数据可视化库,它还可以作为一个有趣的工具,帮助我们在图像设计和艺术创作中发挥想象力。当然,这里展示的只是冰山一角。Matplotlib的潜力远不止于此,我们鼓励你深入挖掘它的功能,尝试更多有趣和创新的设计。

NO.1

往期推荐

Historical articles

简直太逆天了,使用Python来检测和识别车牌号码(附代码)

MySQL 常用脚本

介绍两个好用到爆的Python模块,建议收藏!!

嫌Python代码慢?这个模块让Python提效100倍!!

分享、收藏、点赞、在看安排一下?

【原创】用Matplotlib绘制的图表,真的是太惊艳了!!相关推荐

  1. 使用matplotlib绘制3D图表

    欢迎关注"生信修炼手册"! 除了绘制经典的二维图表外,matplotlib还支持绘制三维图表,通过mplot3d工具可以实现,只需要在axes对象中指定projection参数为3 ...

  2. [转载] 在Python中使用Matplotlib绘制常见图表

    参考链接: Python | 使用openpyxl模块在Excel工作表中绘制图表 3 Matplotlib 是一个非常强大的 Python 画图工具,通过绘制线图.散点图.等高线图.条形图.柱状图. ...

  3. 第八章、使用matplotlib绘制高级图表

    8.1.绘制等高线图 等高线图是地形上高程相等的相邻各点所连成的闭合曲线,它会将地面上海拔高度相同的点连成环线,之后将环线垂直投影到某一水平面上,并按照一定的比例缩绘到图纸上. 在matplotlib ...

  4. 使用matplotlib绘制高级图表8

    1.绘制等高线图 使用contour()和contourf()函数绘制和填充等高线图 import numpy as np import matplotlib.pyplot as plt # 计算高度 ...

  5. 使用matplotlib绘制简单图表第二课

    一.绘制堆积面积图 1.使用 stackplot()绘制堆积面积图 使用pyplot的stackplot0函数可以快速绘制堆积面积图,stackplot(0 函数的语法格式如下所示: stackplo ...

  6. 数据可视化第八章使用matplotlib绘制高级图表

    8.1 绘制等高线图 import numpy as np import matplotlib.pyplot as plt def calcu_elevation(x1, y1): h = (1-x1 ...

  7. 可视化实战,Python绘制出来的数据大屏真的太惊艳了!!

    今天我们在进行一个Python数据可视化的实战练习,用到的模块叫做Panel,我们通过调用此模块来绘制动态可交互的图表以及数据大屏的制作,而本地需要用到的数据集,可在kaggle上面获取 https: ...

  8. python matplotlib绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)

    python matplotlib 绘制3D图表 文章目录 1. 绘制3D柱状图 2. 绘制3D曲面图 ① 示例1 ② 示例2 3.绘制3D散点图 4. 绘制3D曲线图       ʚʕ̯•͡˔•̯᷅ ...

  9. matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等

    matplotlib绘制图表,设置刻度标签.最大最小刻度.字体大小,label位置.刻度轴箭头等 1. 效果图 2. 源码 2.1 仅使用普通轴ax + fontdict 源码 2.2 使用mpl设置 ...

最新文章

  1. 冬奥冠军武大靖也有减重烦恼,还为此发了篇论文
  2. 创业第一天,有三AI扔出了深度学习的150多篇文章和10多个专栏
  3. CTF--base64编码过程中隐藏信息解密脚本
  4. Oracle 原理: 物化视图,快照,实体化视图。
  5. 线程----BlockingQueue (转)
  6. Global.asax或IHttpModule实现屏蔽ip和图片防盗链
  7. 简单三分钟,本地搭建k8s
  8. 微信小程序云数据库带换行的文本保存和获取
  9. 再说共识性算法Raft
  10. java面试题_2020年JAVA最新大厂面试题!
  11. Spring源码情操陶冶-AbstractApplicationContext#registerBeanPostProcessors
  12. 任务35:JWT 认证授权介绍
  13. 【鲲鹏HCIA考试】随堂习题卷三
  14. 在Eclipse上用JAVA连接数据库
  15. 浙大PAT 1063
  16. PRD文档写作详细说明(希望对大家有用)
  17. Swift游戏实战-跑酷熊猫 14 熊猫打滚
  18. ecshop二次开发手册【基本结构】
  19. win10怎么录制电脑屏幕 电脑录制视频
  20. 虚拟运营商出牌:流量不清零难成杀手锏

热门文章

  1. 强网杯 2019[supersqli]
  2. 【DOTA】制作Efficientdet训练数据
  3. 树莓派2的内核编译与安装
  4. SpringDay3
  5. 【七】springboot整合redis(超详细)
  6. 2020第十一届蓝桥杯10月份省赛真题(JavaB组题解)
  7. [Python图像识别] 五十一.水书图像识别之利用数据增强扩充图像数据集
  8. 超写实虚拟人制作模拟真人般交流互动
  9. 国外LEAD操作1个月就收款,副业还是得它
  10. 搞事情?Spring Boot今天一口气发布三个版本