时间:2022-10-09 17:47:25 | 浏览:4176
今天给大家介绍一个很酷的 Python 手绘风格可视化神包:cutecharts
和 Matplotlib 、pyecharts 等常见的图表不同,使用这个包可以生成看起来像手绘的各种图表,在一些特殊场景下使用效果可能会更好。
GitHub 地址:
https://github.com/chenjiandongx/cutecharts
它的画风是这样的:
cutecharts
是由pyecharts作者chenjiandongx开源的一个轻量级的项目;
目前支持Bar
,Line
,Pie
,Radar
,Scatter
五种图表;
支持Page
组合图表;
pip install cutecharts
;
支持的参数直接参考源码中的注释就好~
def set_options(
self,
labels: Iterable,
x_label: str = "",
y_label: str = "",
y_tick_count: int = 3,
legend_pos: str = "upLeft",
colors: Optional[Iterable] = None,
font_family: Optional[str] = None,
):
"""
:param labels: X 坐标轴标签数据
:param x_label: X 坐标轴名称
:param y_label: Y 坐标轴名称
:param y_tick_count: Y 轴刻度分割段数
:param legend_pos: 图例位置,有 "upLeft", "upRight", "downLeft", "downRight" 可选
:param colors: label 颜色数组
:param font_family: CSS font-family
"""
def add_series(self, name: str, data: Iterable):
"""
:param name: series 名称
:param data: series 数据列表
"""
from cutecharts.charts import Line
# 虚假数据
x_data = ["Apple", "Huawei", "Xiaomi", "Oppo", "Vivo", "Meizu", "OnePlus"]
y_data_1 = [57, 134, 137, 129, 145, 60, 49]
y_data_2 = [114, 55, 27, 101, 125, 27, 105]
chart = Line("Mobile phone sales")
chart.set_options(
labels=x_data,
x_label="Brand",
y_label="Sales",
)
chart.add_series("series-A", y_data_1)
chart.add_series("series-B", y_data_2)
chart.render_notebook
from cutecharts.charts import Line
# 虚假数据
x_data = ["Apple", "Huawei", "Xiaomi", "Oppo", "Vivo", "Meizu", "OnePlus"]
y_data_1 = [57, 134, 137, 129, 145, 60, 49]
y_data_2 = [114, 55, 27, 101, 125, 27, 105]
chart = Line("Mobile phone sales")
chart.set_options(
labels=x_data,
x_label="Brand",
y_label="Sales",
legend_pos="upRight"
)
chart.add_series("series-A", y_data_1)
chart.add_series("series-B", y_data_2)
chart.render_notebook
不支持多个系列的数据~
def set_options(
self,
labels: Iterable,
x_label: str = "",
y_label: str = "",
y_tick_count: int = 3,
colors: Optional[Iterable] = None,
font_family: Optional[str] = None,
):
"""
:param labels: X 坐标轴标签数据
:param x_label: X 坐标轴名称
:param y_label: Y 坐标轴名称
:param y_tick_count: Y 轴刻度分割段数
:param colors: label 颜色数组
:param font_family: CSS font-family
"""
def add_series(self, name: str, data: Iterable):
"""
:param name: series 名称
:param data: series 数据列表
"""
# 虚假数据
x_data = ["Apple", "Huawei", "Xiaomi", "Oppo", "Vivo", "Meizu", "OnePlus"]
y_data = [57, 134, 137, 129, 145, 60, 49]
chart = Bar("Mobile phone sales")
chart.set_options(
labels=x_data,
x_label="Brand",
y_label="Sales",
colors=Faker.colors
)
chart.add_series("series-A", y_data)
chart.render_notebook
def set_options(
self,
labels: Iterable,
inner_radius: float = 0.5,
legend_pos: str = "upLeft",
colors: Optional[Iterable] = None,
font_family: Optional[str] = None,
):
"""
:param labels: 数据标签列表
:param inner_radius: Pie 图半径
:param legend_pos: 图例位置,有 "upLeft", "upRight", "downLeft", "downRight" 可选
:param colors: label 颜色数组
:param font_family: CSS font-family
"""
def add_series(self, data: Iterable):
"""
:param data: series 数据列表
"""
# 虚假数据
x_data = ["Apple", "Huawei", "Xiaomi", "Oppo", "Vivo", "Meizu", "OnePlus"]
y_data = [57, 134, 137, 129, 145, 60, 49]
chart = Pie("Mobile phone sales")
chart.set_options(
labels=x_data,
colors=Faker.colors
)
chart.add_series(y_data)
chart.render_notebook
# 虚假数据
x_data = ["Apple", "Huawei", "Xiaomi", "Oppo", "Vivo", "Meizu", "OnePlus"]
y_data = [57, 134, 137, 129, 145, 60, 49]
chart = Pie("Mobile phone sales")
chart.set_options(
labels=x_data,
inner_radius=0,
colors=Faker.colors
)
chart.add_series(y_data)
chart.render_notebook
参考代码注释:
def set_options(
self,
labels: Iterable,
is_show_label: bool = True,
is_show_legend: bool = True,
tick_count: int = 3,
legend_pos: str = "upLeft",
colors: Optional[Iterable] = None,
font_family: Optional[str] = None,
):
"""
:param labels: 数据标签列表
:param is_show_label: 是否显示标签
:param is_show_legend: 是否显示图例
:param tick_count: 坐标系分割刻度
:param legend_pos: 图例位置,有 "upLeft", "upRight", "downLeft", "downRight" 可选
:param colors: label 颜色数组
:param font_family: CSS font-family
"""
def add_series(self, name: str, data: Iterable):
"""
:param name: series 名称
:param data: series 数据列表
"""
# 虚假数据
x_data = ["Apple", "Huawei", "Xiaomi", "Oppo", "Vivo", "Meizu", "OnePlus"]
y_data_1 = [57, 134, 137, 129, 145, 60, 49]
y_data_2 = [114, 55, 27, 101, 125, 27, 105]
chart = Radar("Mobile phone sales")
chart.set_options(
labels=x_data,
is_show_legend=True,
colors=Faker.colors
)
chart.add_series("series-A", y_data_1)
chart.add_series("series-B", y_data_2)
chart.render_notebook
def set_options(
self,
x_label: str = "",
y_label: str = "",
x_tick_count: int = 3,
y_tick_count: int = 3,
is_show_line: bool = False,
dot_size: int = 1,
time_format: Optional[str] = None,
legend_pos: str = "upLeft",
colors: Optional[Iterable] = None,
font_family: Optional[str] = None,
):
"""
:param x_label: X 坐标轴名称
:param y_label: Y 坐标轴名称
:param x_tick_count: X 轴刻度分割段数
:param y_tick_count: Y 轴刻度分割段数
:param is_show_line: 是否将散点连成线
:param dot_size: 散点大小
:param time_format: 日期格式
:param legend_pos: 图例位置,有 "upLeft", "upRight", "downLeft", "downRight" 可选
:param colors: label 颜色数组
:param font_family: CSS font-family
"""
def add_series(self, name: str, data: Iterable):
"""
:param name: series 名称
:param data: series 数据列表,[(x1, y1), (x2, y2)]
"""
# 随机生成数据
data_1 = [(random.randint(0, 100), random.randint(0, 100)) for _ in range(100)]
data_2 = [(random.randint(0, 100), random.randint(0, 100)) for _ in range(100)]
chart = Scatter("random dot")
chart.set_options(
x_label = "I"m x-label",
y_label = "I"m x-yabel",
x_tick_count = 3,
y_tick_count = 3,
is_show_line = False,
dot_size = 1,
legend_pos = "upLeft",
colors=Faker.colors
)
chart.add_series("series-A", data_1)
chart.add_series("series-A", data_2)
chart.render_notebook
# 随机生成数据
data_1 = [(random.randint(0, 100), random.randint(0, 100)) for _ in range(10)]
data_2 = [(random.randint(0, 100), random.randint(0, 100)) for _ in range(10)]
chart = Scatter("random dot")
chart.set_options(
x_label = "I"m x-label",
y_label = "I"m x-yabel",
x_tick_count = 3,
y_tick_count = 3,
is_show_line = True,
dot_size = 1,
legend_pos = "upLeft",
colors=Faker.colors
)
chart.add_series("series-A", data_1)
chart.add_series("series-A", data_2)
chart.render_notebook
# 虚假数据
x_data = ["Apple", "Huawei", "Xiaomi", "Oppo", "Vivo", "Meizu", "OnePlus"]
y_data = [57, 134, 137, 129, 145, 60, 49]
chart_1 = Pie("Mobile phone sales")
chart_1.set_options(
labels=x_data,
inner_radius=0.6,
colors=Faker.colors
)
chart_1.add_series(y_data)
chart_2 = Bar("Mobile phone sales")
chart_2.set_options(
labels=x_data,
x_label="Brand",
y_label="Sales",
colors=Faker.colors
)
chart_2.add_series("series-A", y_data)
page = Page
page.add(chart_1, chart_2)
page.render_notebook
原文链接:https://blog.csdn.net/qq_27484665/article/details/115472329
Python是一门很出色的胶水语言,也就是当我们有现成的组件后,Python非常适合将他们组装起来。机器学习的例子就比较典型。我们用C++写好Tensorflow,用C写好Numpy,用Scala写好Spark,现在想用这些组件训练一个机器
金羊网记者 符畅 通讯员 符超量在公共场所,面对突发疾病和意外伤害,该如何迅速自救及拯救他人?8月2日,广州市首批试点推行的“微型应急站”在广州塔旅游信息咨询中心启动,站内放有自动体外除颤仪(简称AED)和急救箱等器械,将为公共场所急救提供
羊城广州在AED普及方面已经落后其他三个一线城市很多年,甚至落后杭州、宁波等很多其他城市。今天,羊城广州总算跟上啦!AED终于开始在公共场所安装啦!首批试点的八个安装有AED的“微型应急站”站点:1、机场A6咨询站点:白云机场 A到达区
一、强类型和弱类型语言:C、 C++、 Java 、Python都是强类型的语言。PHP是弱类型的语言。强类型语言是一种强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。而弱类型语言是一种弱类型定义
乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAIPython势头不减,依旧第一,而且进一步拉开了与其他语言的差距。这一结果,来自IEEE Spectrum2019年度编程语言排行榜。这已经是Python连续3年保持第一。在Pyth
首先,我们先普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如编写一篇文章,下载一首MP3等,而计算机干活的CPU只认识机器的指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。
全球知名TIOBE 编程语言社区发布了11 月编程语言排行榜。下面让我们一起来看看,本月榜单中有哪些值得注意的新变化吧!01PHP即将跌出前十自 20 多年前 TIOBE 指数开始发布以来,PHP 一直常驻在榜单前十,然而最近,该语言已经开
【51CTO.com快译】在本文中,我们将逐一介绍目前人气较高的三种编程语言:PHP、Ruby和Python。我们将分析它们是如何工作的,它们彼此有何不同,谁在使用它们,以及每种语言受欢迎的程度。一、 PHP:互联网上最受欢迎的脚本语言PH
TIOBE 编程社区指数是编程语言流行程度的指标。该指数每月更新一次。评级基于全球熟练工程师、课程和第三方供应商的数量。谷歌、必应、雅虎、维基百科、亚马逊、YouTube 和百度等流行搜索引擎用于计算评分。需要注意的是,TIOBE 指数与最
IT行业现在依然是求职转行人群的首选,那么当下的IT培训机构中IT技术课程类目繁多,尤其是Java培训,PHP培训,Python培训以及前端培训最火,零基础人员如何选择一种适合自己的编程开发语言课程去学习入行呢?前三者属于后端的开发语言,我