使用随机数据绘制对比某品牌各季度销量与库存的柱状图,添加副标题和自定义颜色
为了绘制对比某品牌各季度销量与库存的柱状图,可借助 Pyecharts 库。首先,生成随机数据模拟各季度的销量和库存情况。接着,创建柱状图对象,将数据添加到图表中,并设置好主标题、副标题以及自定义颜色。
from pyecharts import options as opts
from pyecharts.charts import Bar
import random# 生成随机数据
seasons = ["第一季度", "第二季度", "第三季度", "第四季度"]
sales = [random.randint(100, 500) for _ in range(4)]
stocks = [random.randint(100, 500) for _ in range(4)]# 创建柱状图
bar = (Bar().add_xaxis(seasons).add_yaxis("销量", sales, color="#5793f3").add_yaxis("库存", stocks, color="#d14a61").set_global_opts(title_opts=opts.TitleOpts(title="某品牌各季度销量与库存对比", subtitle="随机数据模拟"),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 渲染图表
bar.render("sales_stock_comparison.html")
在上述代码中,先是导入了必要的库,通过 random
模块生成了各季度的随机销量和库存数据。然后,使用 Bar
类创建了柱状图对象,添加了 X 轴和 Y 轴的数据,并且为销量和库存分别设置了自定义颜色。在全局选项中,设置了主标题、副标题以及显示工具箱。最后,使用 render
方法将图表保存为 HTML 文件。
绘制双 Y 轴柱状图,展示城市人均收入和支出数据,并设置轴标签旋转 45 度
要绘制双 Y 轴柱状图来展示城市人均收入和支出数据,可利用 Pyecharts 实现。首先,准备好城市数据以及对应的人均收入和支出数据。然后,创建双 Y 轴柱状图对象,分别添加收入和支出数据到不同的 Y 轴上,同时设置轴标签旋转 45 度。
from pyecharts import options as opts
from pyecharts.charts import Bar, Line
from pyecharts.globals import ThemeType# 示例数据
cities = ["北京", "上海", "广州", "深圳", "成都"]
incomes = [8000, 9000, 7500, 8500, 6000]
expenses = [6000, 7000, 5500, 6500, 4500]# 创建柱状图
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis(cities).add_yaxis("人均收入", incomes, yaxis_index=0).extend_axis(yaxis=opts.AxisOpts(name="人均支出",axislabel_opts=opts.LabelOpts(rotate=45))).set_global_opts(title_opts=opts.TitleOpts(title="城市人均收入与支出对比"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),yaxis_opts=opts.AxisOpts(name="人均收入"),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 创建折线图并添加到柱状图上
line = (Line().add_xaxis(cities).add_yaxis("人均支出", expenses, yaxis_index=1)
)bar.overlap(line)
bar.render("income_expense_comparison.html")
代码中,导入了所需的库和主题类型。定义了城市列表、人均收入和支出数据。使用 Bar
类创建柱状图,添加 X 轴和 Y 轴数据,同时扩展了一个新的 Y 轴用于显示支出数据,并设置轴标签旋转 45 度。在全局选项中,设置了主标题、X 轴和 Y 轴标签旋转角度以及显示工具箱。使用 Line
类创建折线图来展示支出数据,并将其重叠到柱状图上。最后,将图表保存为 HTML 文件。
实现水平柱状图,展示不同编程语言的受欢迎指数,添加数据标签
为了实现水平柱状图展示不同编程语言的受欢迎指数并添加数据标签,可借助 Pyecharts 来完成。首先,准备好编程语言列表和对应的受欢迎指数数据。然后,创建水平柱状图对象,添加数据并设置数据标签。
from pyecharts import options as opts
from pyecharts.charts import Bar# 示例数据
languages = ["Python", "Java", "JavaScript", "C++", "C#"]
popularity = [90, 80, 75, 70, 65]# 创建水平柱状图
bar = (Bar().add_xaxis(languages).add_yaxis("受欢迎指数", popularity, label_opts=opts.LabelOpts(position="right")).reversal_axis().set_global_opts(title_opts=opts.TitleOpts(title="不同编程语言受欢迎指数"),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 渲染图表
bar.render("language_popularity.html")
此代码中,导入了必要的库。定义了编程语言列表和受欢迎指数数据。使用 Bar
类创建柱状图,添加 X 轴和 Y 轴数据,通过 label_opts
设置数据标签的位置为右侧。使用 reversal_axis
方法将柱状图转换为水平方向。在全局选项中,设置了主标题和显示工具箱。最后,将图表保存为 HTML 文件。
绘制动态温度变化折线图,包含平滑曲线和标记点,并添加区域阴影
要绘制动态温度变化折线图,包含平滑曲线、标记点和区域阴影,可使用 Pyecharts 实现。首先,准备好时间序列数据和对应的温度数据。然后,创建折线图对象,设置平滑曲线、标记点和区域阴影。
from pyecharts import options as opts
from pyecharts.charts import Line# 示例数据
times = ["0:00", "3:00", "6:00", "9:00", "12:00", "15:00", "18:00", "21:00"]
temperatures = [10, 12, 15, 18, 22, 25, 20, 15]# 创建折线图
line = (Line().add_xaxis(times).add_yaxis("温度",temperatures,is_smooth=True,markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),]),areastyle_opts=opts.AreaStyleOpts(opacity=0.5)).set_global_opts(title_opts=opts.TitleOpts(title="动态温度变化折线图"),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 渲染图表
line.render("temperature_change.html")
代码中,导入了所需的库。定义了时间序列数据和温度数据。使用 Line
类创建折线图,添加 X 轴和 Y 轴数据,通过 is_smooth
设置曲线为平滑曲线。使用 markpoint_opts
设置标记点,标记出最大值和最小值。通过 areastyle_opts
设置区域阴影的透明度。在全局选项中,设置了主标题和显示工具箱。最后,将图表保存为 HTML 文件。
用时间序列数据展示股票价格波动,横轴为日期格式,设置提示框格式化
为了用时间序列数据展示股票价格波动,横轴为日期格式并设置提示框格式化,可利用 Pyecharts 实现。首先,准备好日期序列数据和对应的股票价格数据。然后,创建折线图对象,设置 X 轴为日期格式,同时设置提示框的格式化。
from pyecharts import options as opts
from pyecharts.charts import Line
from pyecharts.globals import ThemeType# 示例数据
dates = ["2024-01-01", "2024-01-02", "2024-01-03", "2024-01-04", "2024-01-05"]
prices = [100, 102, 105, 103, 106]# 创建折线图
line = (Line(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis(xaxis_data=dates).add_yaxis(series_name="股票价格",y_axis=prices,label_opts=opts.LabelOpts(is_show=False),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),]),tooltip_opts=opts.TooltipOpts(trigger="axis",axis_pointer_type="cross",formatter="{b}<br/>{a}: {c}")).set_global_opts(title_opts=opts.TitleOpts(title="股票价格波动图"),xaxis_opts=opts.AxisOpts(type_="time",axislabel_opts=opts.LabelOpts(rotate=45)),yaxis_opts=opts.AxisOpts(type_="value",splitline_opts=opts.SplitLineOpts(is_show=True)),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 渲染图表
line.render("stock_price_fluctuation.html")
此代码中,导入了必要的库和主题类型。定义了日期序列数据和股票价格数据。使用 Line
类创建折线图,添加 X 轴和 Y 轴数据,设置标签不显示,添加标记点标记最大值和最小值。通过 tooltip_opts
设置提示框的触发方式、指针类型和格式化字符串。在全局选项中,设置了主标题,将 X 轴类型设置为时间类型并设置轴标签旋转 45 度,Y 轴设置为数值类型并显示分割线,同时显示工具箱。最后,将图表保存为 HTML 文件。
创建环形图展示电商平台各品类销售额占比,调整内径比例为 40%
在电商数据分析中,环形图能够清晰地展示各品类销售额的占比情况。Pyecharts 提供了方便的工具来创建这样的环形图。首先,需要准备各品类的销售额数据,然后利用 Pie
类创建环形图,并通过设置内径比例来呈现环形效果。
from pyecharts import options as opts
from pyecharts.charts import Pie# 示例数据
categories = ["服装", "数码", "食品", "家居", "美妆"]
sales = [3000, 2500, 1800, 1500, 1200]# 创建环形图
pie = (Pie().add("",[list(z) for z in zip(categories, sales)],radius=["40%", "75%"], # 设置内径和外径比例).set_global_opts(title_opts=opts.TitleOpts(title="电商平台各品类销售额占比"),legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),toolbox_opts=opts.ToolboxOpts(is_show=True)).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
)# 渲染图表
pie.render("ecommerce_sales_pie.html")
在上述代码中,导入了必要的库和模块。定义了品类列表和对应的销售额数据。使用 Pie
类创建环形图,通过 radius
参数设置内径为 40%,外径为 75%,从而形成环形效果。在全局选项中,设置了主标题、图例的位置和方向,并显示工具箱。在系列选项中,通过 label_opts
设置标签的显示格式为品类名称和占比。最后,使用 render
方法将图表保存为 HTML 文件。
实现多层嵌套饼图,对比不同地区男女用户比例
多层嵌套饼图可以直观地对比不同地区男女用户的比例。首先,要准备好不同地区的男女用户数据,然后使用 Pie
类创建多层嵌套的饼图。
from pyecharts import options as opts
from pyecharts.charts import Pie# 示例数据
regions = ["华北", "华东", "华南"]
male_users = [1200, 1500, 1000]
female_users = [800, 1300, 900]# 处理数据
data = []
for i, region in enumerate(regions):data.extend([[f"{region}-男", male_users[i]],[f"{region}-女", female_users[i]]])# 创建多层嵌套饼图
pie = (Pie().add("",[list(z) for z in zip(regions, [sum(male_users), sum(female_users)])],radius=["30%", "45%"],center=["50%", "50%"]).add("",data,radius=["50%", "65%"],center=["50%", "50%"]).set_global_opts(title_opts=opts.TitleOpts(title="不同地区男女用户比例对比"),legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),toolbox_opts=opts.ToolboxOpts(is_show=True)).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
)# 渲染图表
pie.render("regional_gender_pie.html")
代码中,导入了所需的库。定义了地区列表、男性用户数量和女性用户数量。将数据处理成适合绘制多层嵌套饼图的格式。使用 Pie
类创建两个饼图,一个表示各地区的总用户数,另一个表示各地区的男女用户数,通过设置不同的半径和中心位置实现嵌套效果。在全局选项中,设置了主标题、图例位置和显示工具箱。在系列选项中,设置标签显示格式。最后,将图表保存为 HTML 文件。
使用 Geo 模块绘制全国疫情分布热力地图,数据点包含动态涟漪效果
利用 Pyecharts 的 Geo
模块可以绘制全国疫情分布热力地图,并添加动态涟漪效果,使地图更加直观和生动。首先,需要准备各地区的疫情数据,然后创建 Geo
对象,添加数据并设置地图类型和效果。
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType# 示例数据
data = [("北京", 100),("上海", 120),("广东", 150),("四川", 80),("浙江", 110)
]# 创建 Geo 地图
geo = (Geo().add_schema(maptype="china").add("疫情分布",data,type_=ChartType.EFFECT_SCATTER, # 添加动态涟漪效果color="white").set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=200),title_opts=opts.TitleOpts(title="全国疫情分布热力地图"),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 渲染图表
geo.render("epidemic_distribution_map.html")
此代码中,导入了必要的库和模块。定义了各地区的疫情数据。使用 Geo
类创建地图,通过 add_schema
方法设置地图类型为中国地图。使用 add
方法添加数据,并设置类型为 EFFECT_SCATTER
以实现动态涟漪效果。在全局选项中,设置了视觉映射组件的最大值、主标题和显示工具箱。在系列选项中,设置标签不显示。最后,将图表保存为 HTML 文件。
用 Map 模块展示各省份 GDP 排名,结合视觉映射组件分段着色
通过 Pyecharts 的 Map
模块可以展示各省份的 GDP 排名,并结合视觉映射组件进行分段着色,使不同 GDP 水平的省份在地图上有明显的区分。首先,准备好各省份的 GDP 数据,然后创建 Map
对象,添加数据并设置视觉映射组件。
from pyecharts import options as opts
from pyecharts.charts import Map# 示例数据
provinces = ["广东", "江苏", "山东", "浙江", "河南"]
gdp = [120000, 110000, 90000, 80000, 60000]# 创建地图
map_chart = (Map().add("GDP", [list(z) for z in zip(provinces, gdp)], "china").set_global_opts(title_opts=opts.TitleOpts(title="各省份 GDP 排名"),visualmap_opts=opts.VisualMapOpts(max_=120000,split_number=5, # 分段数量is_piecewise=True, # 开启分段模式pieces=[{"min": 100000, "label": "10 万亿以上"},{"min": 80000, "max": 99999, "label": "8 - 9.9 万亿"},{"min": 60000, "max": 79999, "label": "6 - 7.9 万亿"},{"min": 40000, "max": 59999, "label": "4 - 5.9 万亿"},{"max": 39999, "label": "4 万亿以下"}]),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 渲染图表
map_chart.render("province_gdp_map.html")
代码中,导入了所需的库。定义了省份列表和对应的 GDP 数据。使用 Map
类创建地图,添加数据并设置地图类型为中国地图。在全局选项中,设置了主标题、视觉映射组件的最大值、分段数量和分段模式,并自定义了分段标签。同时显示工具箱。最后,将图表保存为 HTML 文件。
根据身高体重数据绘制散点图,气泡大小表示 BMI 指数,添加趋势线
根据身高体重数据绘制散点图,用气泡大小表示 BMI 指数,并添加趋势线,可以直观地展示身高、体重和 BMI 之间的关系。首先,准备身高、体重数据,计算 BMI 指数,然后使用 Scatter
类创建散点图,添加趋势线。
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Scatter# 示例数据
heights = [170, 175, 180, 165, 160]
weights = [65, 70, 75, 60, 55]# 计算 BMI 指数
bmis = [weight / ((height / 100) ** 2) for height, weight in zip(heights, weights)]# 创建散点图
scatter = (Scatter().add_xaxis(heights).add_yaxis("数据点",weights,symbol_size=bmis, # 气泡大小表示 BMI 指数label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="身高体重与 BMI 关系散点图"),xaxis_opts=opts.AxisOpts(name="身高 (cm)"),yaxis_opts=opts.AxisOpts(name="体重 (kg)"),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 添加趋势线
x = np.array(heights)
y = np.array(weights)
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
trend_x = np.linspace(min(heights), max(heights), 100)
trend_y = p(trend_x)scatter.add_xaxis(trend_x.tolist())
scatter.add_yaxis("趋势线",trend_y.tolist(),linestyle_opts=opts.LineStyleOpts(color="red"),label_opts=opts.LabelOpts(is_show=False)
)# 渲染图表
scatter.render("height_weight_scatter.html")
此代码中,导入了必要的库。定义了身高和体重数据,计算了对应的 BMI 指数。使用 Scatter
类创建散点图,通过 symbol_size
参数设置气泡大小为 BMI 指数。在全局选项中,设置了主标题、X 轴和 Y 轴的名称以及显示工具箱。使用 numpy
库计算趋势线的参数,并将趋势线添加到散点图中。最后,将图表保存为 HTML 文件。
设计仪表盘展示服务器 CPU、内存、磁盘使用率,数值动态更新
在监控服务器性能时,仪表盘是一种直观展示关键指标(如 CPU、内存、磁盘使用率)的有效方式。为实现数值动态更新,可结合 Python 的pyecharts
库和Flask
框架。pyecharts
用于创建仪表盘,Flask
用于搭建简单的 Web 服务器以实现数据的动态更新。
from flask import Flask, render_template_string
from pyecharts import options as opts
from pyecharts.charts import Gauge
import random
import timeapp = Flask(__name__)def generate_random_usage():cpu_usage = random.uniform(0, 100)memory_usage = random.uniform(0, 100)disk_usage = random.uniform(0, 100)return cpu_usage, memory_usage, disk_usage@app.route("/")
def index():while True:cpu_usage, memory_usage, disk_usage = generate_random_usage()cpu_gauge = (Gauge().add("CPU使用率", [("CPU", cpu_usage)], axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=[(0.3, "#67e0e3"), (0.7, "#37a2da"), (1, "#fd666d")]))).set_global_opts(title_opts=opts.TitleOpts(title="服务器性能监控 - CPU使用率"),toolbox_opts=opts.ToolboxOpts(is_show=True)))memory_gauge = (Gauge().add("内存使用率", [("内存", memory_usage)], axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=[(0.3, "#67e0e3"), (0.7, "#37a2da"), (1, "#fd666d")]))).set_global_opts(title_opts=opts.TitleOpts(title="服务器性能监控 - 内存使用率"),toolbox_opts=opts.ToolboxOpts(is_show=True)))disk_gauge = (Gauge().add("磁盘使用率", [("磁盘", disk_usage)], axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=[(0.3, "#67e0e3"), (0.7, "#37a2da"), (1, "#fd666d")]))).set_global_opts(title_opts=opts.TitleOpts(title="服务器性能监控 - 磁盘使用率"),toolbox_opts=opts.ToolboxOpts(is_show=True)))cpu_html = cpu_gauge.render_embed()memory_html = memory_gauge.render_embed()disk_html = disk_gauge.render_embed()template = f"""<html><head><title>服务器性能监控</title></head><body>{cpu_html}{memory_html}{disk_html}<script>setTimeout(function() {{window.location.reload();}}, 5000); // 每5秒刷新一次</script></body></html>"""return render_template_string(template)if __name__ == "__main__":app.run(debug=True)
上述代码首先定义了一个生成随机使用率的函数generate_random_usage
,模拟服务器的实际使用情况。在index
路由中,使用Gauge
类创建了三个仪表盘,分别展示 CPU、内存和磁盘的使用率。为了实现动态更新,在 HTML 模板中添加了 JavaScript 代码,每 5 秒刷新一次页面。通过运行这个 Flask 应用,在浏览器中打开相应的 URL,就可以看到动态更新的仪表盘。
用进度条水球图表示项目完成度,设置波浪颜色和透明度
进度条水球图是一种形象展示项目完成度的可视化方式。使用pyecharts
的Liquid
类可以轻松创建水球图,并设置波浪颜色和透明度。
from pyecharts import options as opts
from pyecharts.charts import Liquid# 假设项目完成度为70%
project_completion = 0.7(Liquid().add("lq",[project_completion],center=["50%", "50%"],is_outline_show=False,color=["#0080FF"], # 设置波浪颜色background_color="rgba(255, 255, 255, 0.2)" # 设置透明度).set_global_opts(title_opts=opts.TitleOpts(title="项目完成度", subtitle="当前完成度:70%")).render("liquid_project_completion.html")
)
在这段代码中,首先设定了项目完成度为 70%。然后使用Liquid
类创建水球图,通过add
方法添加数据和设置相关参数。color
参数用于设置波浪的颜色,这里设置为蓝色;background_color
参数用于设置背景颜色和透明度,通过 RGBA 值实现。最后设置全局选项,包含标题和副标题,并将图表保存为 HTML 文件。
生成全年每日步数统计日历图,隔天显示数据,调整宽度避免溢出
要生成全年每日步数统计日历图,并实现隔天显示数据和调整宽度避免溢出,可以使用pyecharts
的Calendar
类。
import random
from datetime import datetime, timedelta
from pyecharts import options as opts
from pyecharts.charts import Calendar# 生成全年日期和随机步数数据
start_date = datetime(2024, 1, 1)
end_date = datetime(2024, 12, 31)
date_list = [(start_date + timedelta(days=i)).strftime("%Y-%m-%d") for i in range((end_date - start_date).days + 1)]
step_data = [random.randint(2000, 10000) for _ in range(len(date_list))]# 隔天显示数据
filtered_data = [(date, step) for date, step in zip(date_list, step_data) if int(date.split('-')[2]) % 2 == 1](Calendar().add(series_name="步数",yaxis_data=filtered_data,calendar_opts=opts.CalendarOpts(pos_top="10%",pos_left="3%",pos_right="5%",range_="2024",daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"),monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn")),).set_global_opts(title_opts=opts.TitleOpts(title="全年每日步数统计", subtitle="隔天显示数据"),visualmap_opts=opts.VisualMapOpts(max_=10000,min_=2000,orient="horizontal",is_piecewise=True,pos_top="23%",pos_left="20%"),toolbox_opts=opts.ToolboxOpts(is_show=True)).render("calendar_step_statistics.html")
)
此代码首先生成了全年的日期列表和对应的随机步数数据。然后通过筛选操作,只保留日期为奇数的记录,实现隔天显示数据。接着使用Calendar
类创建日历图,在add
方法中添加数据和设置日历选项,包括位置、范围、日期和月份标签的显示方式。在全局选项中,设置了标题、副标题、视觉映射组件和工具箱,通过调整视觉映射组件的位置和方向,避免图表溢出。最后将图表保存为 HTML 文件。
绘制热力图展示电商平台 24 小时用户活跃度,横轴为小时,纵轴为星期
热力图能够直观地展示电商平台在不同时间段的用户活跃度。使用pyecharts
的HeatMap
类可以实现这一功能。
import random
from pyecharts import options as opts
from pyecharts.charts import HeatMap# 生成24小时和7天的数据
hours = [str(i) for i in range(24)]
weeks = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]# 生成随机的用户活跃度数据
data = [[i, j, random.randint(0, 100)]for i in range(7)for j in range(24)
](HeatMap().add_xaxis(hours).add_yaxis("星期", weeks, data).set_global_opts(title_opts=opts.TitleOpts(title="电商平台24小时用户活跃度热力图"),visualmap_opts=opts.VisualMapOpts(min_=0, max_=100),toolbox_opts=opts.ToolboxOpts(is_show=True)).render("heatmap_user_activity.html")
)
代码中,首先定义了小时和星期的列表。然后生成随机的用户活跃度数据,每个数据点表示特定星期和小时的活跃度。使用HeatMap
类创建热力图,通过add_xaxis
和add_yaxis
方法添加横轴和纵轴的数据。在全局选项中,设置了标题、视觉映射组件和工具箱,视觉映射组件用于根据活跃度值的大小显示不同的颜色。最后将图表保存为 HTML 文件。
构建社交网络关系图,节点大小表示粉丝数,连边粗细表示互动频率
构建社交网络关系图可以帮助我们理解社交网络中节点之间的关系。使用pyecharts
的Graph
类可以实现这一功能,通过节点大小表示粉丝数,连边粗细表示互动频率。
from pyecharts import options as opts
from pyecharts.charts import Graph# 示例数据
nodes = [{"name": "节点A", "symbolSize": 50, "value": 1000}, # symbolSize表示节点大小,value表示粉丝数{"name": "节点B", "symbolSize": 30, "value": 500},{"name": "节点C", "symbolSize": 40, "value": 800}
]links = [{"source": "节点A", "target": "节点B", "value": 20}, # value表示互动频率{"source": "节点A", "target": "节点C", "value": 30},{"source": "节点B", "target": "节点C", "value": 10}
](Graph().add("",nodes,links,repulsion=8000,linestyle_opts=opts.LineStyleOpts(width=lambda x: x["value"] / 10 # 根据互动频率设置连边粗细)).set_global_opts(title_opts=opts.TitleOpts(title="社交网络关系图"),toolbox_opts=opts.ToolboxOpts(is_show=True)).render("graph_social_network.html")
)
这段代码定义了节点和连边的数据,节点的symbolSize
属性表示节点大小,对应粉丝数;连边的value
属性表示互动频率。使用Graph
类创建社交网络关系图,通过add
方法添加节点和连边数据,并设置节点的排斥力。通过linestyle_opts
的width
参数,根据互动频率动态设置连边的粗细。在全局选项中,设置了标题和工具箱。最后将图表保存为 HTML 文件。
使用极坐标系展示风向与风速分布,类型为雷达图
在气象数据分析中,风向和风速的分布情况是重要的研究内容。使用极坐标系的雷达图可以直观地展示风向与风速的分布关系。
在 Pyecharts 里,Radar
类能创建雷达图。要展示风向与风速分布,得先定义风向和风速的数据,再把数据添加到雷达图中。
from pyecharts import options as opts
from pyecharts.charts import Radar# 定义风向标签
angles = ["北", "东北", "东", "东南", "南", "西南", "西", "西北"]# 模拟风速数据
wind_speeds = [[10, 15, 20, 25, 30, 20, 15, 10]
]# 定义雷达图的指示器
c_schema = [{"name": angle, "max": 30} for angle in angles]# 创建雷达图
(Radar().add_schema(schema=c_schema, shape="circle").add("风速分布", wind_speeds, color="skyblue").set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="风向与风速分布雷达图"),toolbox_opts=opts.ToolboxOpts(is_show=True)).render("wind_radar_chart.html")
)
在上述代码中,首先定义了风向标签和模拟的风速数据。接着,创建了雷达图的指示器,每个指示器对应一个风向,并且设置了最大值。之后,使用 Radar
类创建雷达图,添加指示器和风速数据,设置了雷达图的形状为圆形。在系列选项中,不显示标签;在全局选项中,设置了标题和显示工具箱。最后,将雷达图渲染为 HTML 文件。
实现时间轴轮播图,动态展示近五年人口增长率变化
为了动态展示近五年人口增长率的变化,可以借助 Pyecharts 的 Timeline
和 Line
类来实现时间轴轮播图。
from pyecharts import options as opts
from pyecharts.charts import Timeline, Line# 模拟近五年的年份
years = ["2020", "2021", "2022", "2023", "2024"]# 模拟每年的人口增长率数据
growth_rates = [[0.5, 0.6, 0.7, 0.8, 0.9],[0.6, 0.7, 0.8, 0.9, 1.0],[0.7, 0.8, 0.9, 1.0, 1.1],[0.8, 0.9, 1.0, 1.1, 1.2],[0.9, 1.0, 1.1, 1.2, 1.3]
]# 创建时间轴对象
timeline = Timeline()# 为每一年创建折线图并添加到时间轴中
for i, year in enumerate(years):line = (Line().add_xaxis(years).add_yaxis("人口增长率", growth_rates[i], is_smooth=True).set_global_opts(title_opts=opts.TitleOpts(title=f"{year} 年人口增长率变化"),yaxis_opts=opts.AxisOpts(name="人口增长率 (%)"),xaxis_opts=opts.AxisOpts(name="年份"),toolbox_opts=opts.ToolboxOpts(is_show=True)))timeline.add(line, year)# 设置时间轴的播放选项
timeline.add_schema(play_interval=1000, # 播放间隔为 1 秒is_auto_play=True, # 自动播放is_loop_play=True, # 循环播放is_timeline_show=True # 显示时间轴
)# 渲染时间轴轮播图
timeline.render("population_growth_timeline.html")
在这段代码中,先定义了近五年的年份和每年的人口增长率数据。然后,创建了 Timeline
对象,为每一年创建一个折线图,并将其添加到时间轴中。在折线图的全局选项中,设置了标题、坐标轴名称和显示工具箱。接着,设置了时间轴的播放选项,包括播放间隔、是否自动播放、是否循环播放和是否显示时间轴。最后,将时间轴轮播图渲染为 HTML 文件。
结合 Tooltip 组件,在词云图中悬停显示词汇的详细统计信息
在词云图中,当用户悬停在某个词汇上时,显示该词汇的详细统计信息可以增强可视化的交互性。借助 Pyecharts 的 WordCloud
和 Tooltip
组件能够实现这一功能。
from pyecharts import options as opts
from pyecharts.charts import WordCloud# 模拟词汇及其统计信息
words = [("Python", 100, "使用频率:高,应用领域广泛"),("Java", 80, "使用频率:较高,企业级应用常用"),("JavaScript", 70, "使用频率:高,前端开发必备"),("C++", 60, "使用频率:中,系统编程常用")
]# 创建词云图
(WordCloud().add(series_name="编程语言",data_pair=words,word_size_range=[20, 100],textstyle_opts=opts.TextStyleOpts(font_family="cursive")).set_global_opts(title_opts=opts.TitleOpts(title="编程语言词云图"),tooltip_opts=opts.TooltipOpts(is_show=True),toolbox_opts=opts.ToolboxOpts(is_show=True)).render("wordcloud_with_tooltip.html")
)
上述代码中,定义了模拟的词汇及其统计信息。使用 WordCloud
类创建词云图,添加词汇数据,设置词云图的字体大小范围和字体样式。在全局选项中,设置了标题、显示 Tooltip
组件和显示工具箱。当用户将鼠标悬停在词云图的词汇上时,就会显示该词汇的详细统计信息。
从 CSV 文件读取销售数据,清洗异常值后生成区域销售额排行榜柱状图
在实际业务中,常常需要从 CSV 文件读取销售数据,清洗其中的异常值,然后生成区域销售额排行榜柱状图。
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar# 从 CSV 文件读取销售数据
try:data = pd.read_csv("sales_data.csv")
except FileNotFoundError:print("未找到销售数据文件,请检查文件路径。")
else:# 清洗异常值(假设销售额小于 0 为异常值)data = data[data["销售额"] >= 0]# 按区域分组计算总销售额regional_sales = data.groupby("区域")["销售额"].sum().reset_index()# 对区域销售额进行排序regional_sales = regional_sales.sort_values(by="销售额", ascending=False)# 创建柱状图(Bar().add_xaxis(regional_sales["区域"].tolist()).add_yaxis("销售额", regional_sales["销售额"].tolist()).set_global_opts(title_opts=opts.TitleOpts(title="区域销售额排行榜"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),yaxis_opts=opts.AxisOpts(name="销售额"),toolbox_opts=opts.ToolboxOpts(is_show=True)).render("regional_sales_bar_chart.html"))
这段代码首先尝试从 CSV 文件中读取销售数据,如果文件不存在则输出错误信息。接着,清洗数据,将销售额小于 0 的数据视为异常值并过滤掉。然后,按区域分组计算总销售额,并对结果进行排序。最后,使用 Bar
类创建柱状图,添加区域和销售额数据,设置全局选项,包括标题、坐标轴标签旋转角度、坐标轴名称和显示工具箱,将柱状图渲染为 HTML 文件。
使用 jieba 分词提取文本高频词,生成词云图并保存为 PNG 图片
在文本分析中,使用 jieba
分词提取文本中的高频词,然后生成词云图并保存为 PNG 图片是常见的操作。
import jieba
from collections import Counter
from pyecharts import options as opts
from pyecharts.charts import WordCloud# 示例文本
text = "Python 是一种高级编程语言,广泛应用于数据科学、机器学习、Web 开发等领域。Java 也是一种重要的编程语言,常用于企业级应用开发。JavaScript 则是前端开发的核心语言。"# 使用 jieba 分词
words = jieba.lcut(text)# 过滤掉无意义的词语(如标点符号、停用词等)
stopwords = [",", "。", "是", "一种", "等", "也", "则"]
filtered_words = [word for word in words if word not in stopwords]# 统计高频词
word_counts = Counter(filtered_words)
top_words = word_counts.most_common(20)# 创建词云图
(WordCloud().add(series_name="高频词",data_pair=top_words,word_size_range=[20, 100],textstyle_opts=opts.TextStyleOpts(font_family="cursive")).set_global_opts(title_opts=opts.TitleOpts(title="文本高频词词云图"),toolbox_opts=opts.ToolboxOpts(is_show=True)).render("wordcloud.png")
)
在这段代码中,首先定义了示例文本。使用 jieba
对文本进行分词,然后过滤掉无意义的词语,如标点符号和停用词。接着,统计高频词,选取出现次数最多的 20 个词语。使用 WordCloud
类创建词云图,添加高频词数据,设置词云图的字体大小范围和字体样式。在全局选项中,设置了标题和显示工具箱。最后,将词云图保存为 PNG 图片。
在同一画布叠加折线图(温度)和柱状图(降水量),双 X 轴对齐
在气象数据可视化中,常需要在同一画布展示温度和降水量的变化情况。可以使用 Pyecharts 的 Overlap
类将折线图(温度)和柱状图(降水量)叠加,同时确保双 X 轴对齐。
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Overlap# 示例数据
months = ["1月", "2月", "3月", "4月", "5月", "6月"]
temperatures = [10, 12, 15, 18, 22, 25]
precipitations = [20, 25, 30, 35, 40, 45]# 创建柱状图(降水量)
bar = (Bar().add_xaxis(months).add_yaxis("降水量", precipitations).set_global_opts(title_opts=opts.TitleOpts(title="温度与降水量变化"),xaxis_opts=opts.AxisOpts(name="月份"),yaxis_opts=opts.AxisOpts(name="降水量(mm)"),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 创建折线图(温度)
line = (Line().add_xaxis(months).add_yaxis("温度", temperatures, yaxis_index=1).set_global_opts(xaxis_opts=opts.AxisOpts(name="月份"),yaxis_opts=opts.AxisOpts(name="温度(℃)", axislabel_opts=opts.LabelOpts(formatter="{value} °C")))
)# 叠加图表
overlap = bar.overlap(line)
overlap.render("temperature_precipitation.html")
在上述代码中,首先定义了月份、温度和降水量的数据。接着分别创建了柱状图和折线图,为折线图设置了第二个 Y 轴索引。最后使用 overlap
方法将两个图表叠加在一起,并渲染为 HTML 文件。通过这种方式,能在同一画布清晰展示温度和降水量随月份的变化,且双 X 轴自然对齐。
将地图与饼图结合,点击省份显示该地区产业结构分布
在区域经济分析中,把地图和饼图结合起来,点击地图上的省份就能显示该地区的产业结构分布,这种交互方式能增强数据可视化的效果。可以借助 Pyecharts 的 Map
和 Pie
类,结合 JavaScript 实现交互功能。
from pyecharts import options as opts
from pyecharts.charts import Map, Pie
from pyecharts.globals import ThemeType# 示例数据
provinces = ["广东", "江苏", "山东"]
primary_industries = [5, 4, 6]
secondary_industries = [45, 48, 42]
tertiary_industries = [50, 48, 52]# 创建地图
map_chart = (Map(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add("省份", [list(z) for z in zip(provinces, [1] * len(provinces))], "china").set_global_opts(title_opts=opts.TitleOpts(title="地区产业结构分布"),visualmap_opts=opts.VisualMapOpts(is_show=False),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 创建饼图
pie_chart = (Pie().add("",[("第一产业", primary_industries[0]), ("第二产业", secondary_industries[0]), ("第三产业", tertiary_industries[0])],radius=["30%", "75%"],).set_global_opts(title_opts=opts.TitleOpts(title="产业结构分布"),legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"))
)# 结合地图和饼图
map_chart.overlap(pie_chart)
map_chart.render("province_industry_map.html")
上述代码先定义了省份和各产业的数据。然后创建了地图和初始的饼图,地图显示省份,饼图显示默认省份的产业结构。最后将饼图叠加到地图上并渲染。为实现点击省份显示对应产业结构的交互,可在 HTML 文件中添加 JavaScript 代码,根据点击事件更新饼图的数据。
应用 Walden 主题绘制夜间模式销量趋势图,调整标题字体和背景色
使用 Pyecharts 的 Walden 主题可以绘制出具有夜间模式风格的销量趋势图,同时可以对标题字体和背景色进行调整。
from pyecharts import options as opts
from pyecharts.charts import Line
from pyecharts.globals import ThemeType# 示例数据
dates = ["2024-01-01", "2024-01-02", "2024-01-03", "2024-01-04", "2024-01-05"]
sales = [100, 120, 150, 130, 160]# 创建折线图
line = (Line(init_opts=opts.InitOpts(theme=ThemeType.WALDEN)).add_xaxis(dates).add_yaxis("销量", sales).set_global_opts(title_opts=opts.TitleOpts(title="夜间模式销量趋势图",title_textstyle_opts=opts.TextStyleOpts(font_family="Arial", font_size=24, color="#FFFFFF")),xaxis_opts=opts.AxisOpts(name="日期"),yaxis_opts=opts.AxisOpts(name="销量"),toolbox_opts=opts.ToolboxOpts(is_show=True),bg_color="#000000" # 设置背景色为黑色)
)# 渲染图表
line.render("sales_trend_walden.html")
此代码中,定义了日期和销量的数据。使用 Line
类创建折线图,并选择 Walden 主题。在全局选项中,设置了标题字体为 Arial、大小为 24、颜色为白色,同时将背景色设置为黑色,突出夜间模式的效果。最后渲染为 HTML 文件,能直观展示夜间模式下的销量趋势。
自定义主题配色方案,实现企业 VI 风格的漏斗图
企业在进行数据可视化时,可能需要使用符合自身 VI 风格的配色方案。可以通过自定义主题来实现企业 VI 风格的漏斗图。
from pyecharts import options as opts
from pyecharts.charts import Funnel
from pyecharts.globals import ThemeType# 自定义主题配色方案
theme = {"color": ["#FF5733", "#FFC300", "#DAF7A6", "#C70039", "#900C3F"]
}# 示例数据
stages = ["访问", "注册", "筛选", "购买", "复购"]
values = [1000, 800, 600, 400, 200]# 创建漏斗图
funnel = (Funnel(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add("漏斗图",[list(z) for z in zip(stages, values)],label_opts=opts.LabelOpts(position="inside"),itemstyle_opts=opts.ItemStyleOpts(border_color="#FFFFFF", border_width=1)).set_global_opts(title_opts=opts.TitleOpts(title="企业 VI 风格漏斗图"),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 应用自定义主题
funnel.theme = theme# 渲染图表
funnel.render("enterprise_vi_funnel.html")
上述代码先定义了自定义主题的配色方案,使用一组符合企业 VI 风格的颜色。接着定义了漏斗图的数据,创建漏斗图并设置相关选项。最后将自定义主题应用到漏斗图上并渲染,这样就能得到具有企业 VI 风格的漏斗图,清晰展示业务流程中的转化情况。
解释 set_global_opts 与 set_series_opts 的区别,举例说明配置项
在 Pyecharts 中,set_global_opts
和 set_series_opts
是两个重要的方法,用于设置图表的全局选项和系列选项,它们的功能和使用场景有所不同。
set_global_opts
用于设置图表的全局配置,这些配置会影响整个图表,包括标题、图例、工具箱、坐标轴等。例如,设置图表的标题、调整图例的位置和样式、显示工具箱等操作都可以通过 set_global_opts
实现。
from pyecharts import options as opts
from pyecharts.charts import Bar# 示例数据
categories = ["苹果", "香蕉", "橙子"]
sales = [100, 120, 150]bar = (Bar().add_xaxis(categories).add_yaxis("销量", sales).set_global_opts(title_opts=opts.TitleOpts(title="水果销量统计"),legend_opts=opts.LegendOpts(pos_top="5%"),toolbox_opts=opts.ToolboxOpts(is_show=True),xaxis_opts=opts.AxisOpts(name="水果种类"),yaxis_opts=opts.AxisOpts(name="销量"))
)bar.render("global_opts_example.html")
在上述代码中,set_global_opts
里设置了标题、图例位置、显示工具箱以及坐标轴的名称,这些配置会影响整个柱状图的外观和交互。
set_series_opts
用于设置图表系列的配置,主要针对具体的数据系列,如设置数据标签的显示格式、线条样式、柱状图的颜色等。
from pyecharts import options as opts
from pyecharts.charts import Bar# 示例数据
categories = ["苹果", "香蕉", "橙子"]
sales = [100, 120, 150]bar = (Bar().add_xaxis(categories).add_yaxis("销量", sales).set_series_opts(label_opts=opts.LabelOpts(position="top"),itemstyle_opts=opts.ItemStyleOpts(color="#FF5733"))
)bar.render("series_opts_example.html")
在这段代码中,set_series_opts
设置了数据标签显示在柱状图顶部,以及柱状图的颜色为橙色,这些配置只针对当前的数据系列。
综上所述,set_global_opts
关注的是整个图表的全局设置,而 set_series_opts
侧重于具体数据系列的个性化设置。通过合理使用这两个方法,可以灵活定制出满足需求的可视化图表。
如何解决地图渲染时部分省份数据不显示的问题?
在使用 Pyecharts 进行地图渲染时,部分省份数据不显示可能由多种原因导致,下面针对不同原因给出解决办法。
数据匹配问题
当数据中的省份名称与 Pyecharts 地图中的省份名称不匹配时,就会出现部分省份数据不显示的情况。Pyecharts 对省份名称有特定的规范,像 “新疆维吾尔自治区” 要写成 “新疆”,“内蒙古自治区” 要写成 “内蒙古”。所以,在准备数据时,要保证省份名称和 Pyecharts 地图里的名称一致。
from pyecharts import options as opts
from pyecharts.charts import Map# 错误示例数据
data = [("新疆维吾尔自治区", 100), ("内蒙古自治区", 200)]
# 修正后的数据
corrected_data = [("新疆", 100), ("内蒙古", 200)](Map().add("数据", corrected_data, "china").set_global_opts(title_opts=opts.TitleOpts(title="地图数据展示")).render("map_fixed.html")
)
数据缺失问题
若数据里缺少某些省份的数据,这些省份自然不会显示数据。要检查数据的完整性,确保涵盖所有需要展示的省份。可以通过创建一个包含所有省份的列表,然后用数据去匹配,给缺失数据的省份补充默认值。
all_provinces = ["北京", "天津", "河北", ...] # 完整的省份列表
data = [("北京", 100), ("上海", 200)]
complete_data = []
for province in all_provinces:found = Falsefor item in data:if item[0] == province:complete_data.append(item)found = Truebreakif not found:complete_data.append((province, 0))(Map().add("数据", complete_data, "china").set_global_opts(title_opts=opts.TitleOpts(title="地图数据展示")).render("map_complete.html")
)
地图类型问题
要确保使用的地图类型和数据相匹配。比如,若数据是全国省份的数据,就要使用 “china” 地图类型;若数据是某个特定区域的,要选择对应的区域地图类型。
# 展示中国地图
(Map().add("数据", data, "china").set_global_opts(title_opts=opts.TitleOpts(title="中国地图数据展示")).render("china_map.html")
)# 展示某个区域地图
(Map().add("数据", data, "广东").set_global_opts(title_opts=opts.TitleOpts(title="广东地图数据展示")).render("guangdong_map.html")
)
实现链式调用与非链式调用的代码对比,说明优缺点。
链式调用
链式调用是指在一个对象上连续调用多个方法,每个方法返回对象本身,从而可以继续调用其他方法。下面是使用 Pyecharts 进行链式调用的示例。
from pyecharts import options as opts
from pyecharts.charts import Barbar = (Bar().add_xaxis(["苹果", "香蕉", "橙子"]).add_yaxis("销量", [100, 120, 150]).set_global_opts(title_opts=opts.TitleOpts(title="水果销量统计")).render("chain_call.html")
)
非链式调用
非链式调用则是分别调用每个方法,每次调用后不返回对象本身。以下是非链式调用的示例。
from pyecharts import options as opts
from pyecharts.charts import Barbar = Bar()
bar.add_xaxis(["苹果", "香蕉", "橙子"])
bar.add_yaxis("销量", [100, 120, 150])
bar.set_global_opts(title_opts=opts.TitleOpts(title="水果销量统计"))
bar.render("non_chain_call.html")
优缺点对比
- 链式调用:
- 优点:代码简洁,可读性高,能够清晰地展示方法调用的顺序和逻辑,减少了中间变量的使用,使代码更加流畅。
- 缺点:当链式调用过长时,可能会导致代码难以调试和维护,一旦出现错误,定位问题相对困难。
- 非链式调用:
- 优点:代码结构清晰,每个方法调用独立,便于调试和维护。在需要对中间结果进行处理或者多次使用中间对象时,非链式调用更加合适。
- 缺点:代码相对冗长,需要更多的中间变量,降低了代码的简洁性。
如何将 Pyecharts 图表嵌入 Flask 应用并动态传递数据?
要将 Pyecharts 图表嵌入 Flask 应用并动态传递数据,可以按照以下步骤进行。
安装依赖
确保已经安装了 Flask 和 Pyecharts。
pip install flask pyecharts
创建 Flask 应用
下面是一个简单的 Flask 应用示例,动态生成 Pyecharts 图表。
from flask import Flask, render_template_string
from pyecharts import options as opts
from pyecharts.charts import Bar
import randomapp = Flask(__name__)@app.route("/")
def index():# 动态生成数据categories = ["苹果", "香蕉", "橙子"]sales = [random.randint(100, 200) for _ in range(len(categories))]bar = (Bar().add_xaxis(categories).add_yaxis("销量", sales).set_global_opts(title_opts=opts.TitleOpts(title="水果销量统计")))chart_html = bar.render_embed()template = f"""<html><head><title>动态 Pyecharts 图表</title></head><body>{chart_html}</body></html>"""return render_template_string(template)if __name__ == "__main__":app.run(debug=True)
代码解释
- 定义了一个 Flask 应用,当访问根路径时,会执行
index
函数。 - 在
index
函数中,动态生成水果销量数据。 - 使用 Pyecharts 创建柱状图,并将图表渲染为 HTML 字符串。
- 把渲染后的 HTML 字符串嵌入到一个简单的 HTML 模板中,然后返回给客户端。
通过这种方式,就可以将 Pyecharts 图表嵌入 Flask 应用,并实现数据的动态传递。每次刷新页面,都会重新生成随机的销量数据,更新图表显示。