1.散点图

这是图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from pyecharts.charts import Scatter, Grid
from pyecharts import options as opts
import pandas as pd;
data = pd.read_csv("./Ad_sales.csv")
tv_data = list(data.iloc[0:]["TV"])
radio_data = list(data.iloc[0:]["radio"])
newspaper_data =list(data.iloc[0:]["newspaper"])
sales_data = list(data.iloc[0:]["sales"])
# 准备数据
# x_data = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
# 创建一个散点图对象
scatter = Scatter()
# 添加 X 轴和 Y 轴的数据,以及散点的大小
scatter.add_xaxis(xaxis_data=tv_data)
scatter.add_yaxis(
'TV 广告投入',
y_axis=sales_data,
itemstyle_opts=opts.ItemStyleOpts(color='purple'),
# color='green',
label_opts=opts.LabelOpts( # 标签配置项
is_show=False
),
symbol_size=20)

# 设置全局配置项,如标题、图例等
scatter.set_global_opts(
# 当x轴和y轴的数据均为数值,要将x轴和y轴的类型全都设置为value,散点才能正常呈现
legend_opts=opts.LegendOpts(is_show=True, pos_left='left'),
xaxis_opts=opts.AxisOpts(name='TV 广告投入', type_='value',name_textstyle_opts=opts.TextStyleOpts(align='center')),
yaxis_opts=opts.AxisOpts(type_='value',name="销售额"),
)

# 渲染图表到 HTML 文件
# scatter.render("scatter_chart_with_different_sizes.html")
scatter2 = Scatter()
# 添加 X 轴和 Y 轴的数据,以及散点的大小
scatter2.add_xaxis(xaxis_data=radio_data)
scatter2.add_yaxis(
'广播广告投入',
y_axis=sales_data,
itemstyle_opts=opts.ItemStyleOpts(color='red'),
label_opts=opts.LabelOpts( # 标签配置项
is_show=False
),
# color='green',
symbol_size=20)

# 设置全局配置项,如标题、图例等
scatter2.set_global_opts(
legend_opts=opts.LegendOpts(is_show=True, pos_left='center'),
# 当x轴和y轴的数据均为数值,要将x轴和y轴的类型全都设置为value,散点才能正常呈现
xaxis_opts=opts.AxisOpts(name='广播广告投入', type_='value'),
yaxis_opts=opts.AxisOpts(type_='value',name="销售额")
)
scatter3 = Scatter()
# 添加 X 轴和 Y 轴的数据,以及散点的大小
scatter3.add_xaxis(xaxis_data=newspaper_data)
scatter3.add_yaxis(
'报纸投入',
y_axis=sales_data,
itemstyle_opts=opts.ItemStyleOpts(color='yellow'),
# color='green',
label_opts=opts.LabelOpts( # 标签配置项
is_show=False
),
symbol_size=20)

# 设置全局配置项,如标题、图例等
scatter3.set_global_opts(
legend_opts=opts.LegendOpts(is_show=True, pos_left='right'),
# 当x轴和y轴的数据均为数值,要将x轴和y轴的类型全都设置为value,散点才能正常呈现
xaxis_opts=opts.AxisOpts(name='报纸投入', type_='value'),
yaxis_opts=opts.AxisOpts(type_='value',name="销售额")
)

# 将三个散点图通过网格进行布局
grid = (
Grid(init_opts=opts.InitOpts(width='100%'))
.add(scatter, grid_opts=opts.GridOpts(pos_left='3%', width='30%'))
.add(scatter2,grid_opts=opts.GridOpts(pos_left='35%', width='30%'))
.add(scatter3,grid_opts=opts.GridOpts(pos_left='68%', width='30%'))
.render()
)

# 随堂练习中的数据提取
# data = np.loadtxt('../data/Ad_sales.csv', delimiter=',', skiprows=1, usecols=[1, 4])
# print(data)
# x_data = [d[0] for d in data]
# y_data = [d[1] for d in data]
# print(x_data)
# print(y_data)

2.雷达图

这是图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

from pyecharts.charts import Radar
from pyecharts import options as opts
import pandas as pd

data = pd.read_excel("./居民人均收支.xls")
lagent_data = list(data)[1:]
jm_data=[]
cs_data=[]
nc_data =[]
for i in range(len(list(data.iloc[0:]["指标"]))):
if data.iloc[i]["指标"] == '居民人均消费支出(元)':
jm_data=list(data.iloc[i])[1:]
if data.iloc[i]["指标"] == '城镇居民人均消费支出(元)':
cs_data=list(data.iloc[i])[1:]
if data.iloc[i]["指标"] == '农村居民人均消费支出(元)':
nc_data=list(data.iloc[i])[1:]
maxes=[]
for i in range(len(jm_data)):
number1 = jm_data[i]
number2 = cs_data[i]
number3 = nc_data[i]
maxes.append(max(number1,number2,number3)+10000)
schema_data=[]
for i in range (len(jm_data)):
schema_data.append({"name": lagent_data[i], "max": maxes[i]})
c = (
Radar()
.add_schema(schema=schema_data[0:5]) # 设置雷达图的参数(各个顶点代表的意义和最大值,最小值)
# .add_schema(
# schema=[
# opts.RadarIndicatorItem(name=lagent_data[0], max_=maxes[0], color='pink'),
# opts.RadarIndicatorItem(name=lagent_data[1], max_=maxes[1], color='red'),
# opts.RadarIndicatorItem(name=lagent_data[2], max_=maxes[2], color='yellow'),
# opts.RadarIndicatorItem(name=lagent_data[3], max_=maxes[3], color='grey'),
# opts.RadarIndicatorItem(name=lagent_data[4], max_=maxes[4], color='black'),
# ]
# )
.add("居民",[jm_data[0:5]],color="red")
.add("城市",[cs_data[0:5]],color="yellow")
.add("农村",[nc_data[0:5]],color="pink")# 添加系列名称、系列数据及相关操作 饼图:[['A',233],[],[]] 雷达图:[[20,79,76,89,97]]
.set_global_opts(
title_opts= opts.TitleOpts(title="2016-2020年居民人均消费支出情况",subtitle="单位:元",pos_left="left"),
legend_opts = opts.LegendOpts(orient="vertical",pos_right="120px")
)
.set_series_opts()
.render()
)


3.平行图

这是图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

from pyecharts import options as opts
from pyecharts.charts import Parallel
import pandas as pd

data = pd.read_excel("./各类学历教育招生人数.xls")
data_show=data[data["2020年"]>0][["指标","2020年","2019年","2018年","2017年","2016年"]]
legent = list(data_show["指标"])
y20 = list(data_show['2020年'])
y19 = list(data_show['2019年'])
y18 = list(data_show['2018年'])
y17 = list(data_show['2017年'])
y16 = list(data_show['2016年'])
y_data = list(data)[1:6]
print(y_data)
print(legent)
print(y20)
print(y19)
print(y18)
print(y17)
print(y16)

'''
平行坐标图(Parallel Coordinates Chart)是一种用来呈现多变量或者高纬度数据的可视化技术,
用它可以很好的表现多个变量之间的关系
'''

'''
需求:制作平行坐标图来展示2023年全国应届毕业生的就业情况(数据包含专业、学历、性别、就业率)
'''
print([y20[0],y20[1],y20[2],y20[3],y20[4],y20[5],y_data[0]])
# 假设的数据集
data1 = [
[y20[0],y20[1],y20[2],y20[3],y20[4],y20[5],y_data[0]],
[y19[0],y19[1],y19[2],y19[3],y19[4],y19[5],y_data[1]],
[y18[0],y18[1],y18[2],y18[3],y18[4],y18[5],y_data[2]],
[y17[0],y17[1],y17[2],y17[3],y17[4],y17[5],y_data[3]],
[y16[0],y16[1],y16[2],y16[3],y16[4],y16[5],y_data[4]],
]



# 创建平行坐标图对象
parallel = (
Parallel(init_opts=opts.InitOpts(width='700px',height='500px'))
.set_global_opts(
title_opts=opts.TitleOpts(pos_left="left",title="2016-2020年各类学历教育招生人数情况",subtitle="单位:万人"),
legend_opts=opts.LegendOpts(is_show=True,pos_right="120px")
)
# 添加轴线和数据
.add_schema(
schema=[
# 设置不同维度的轴数据
opts.ParallelAxisOpts(dim=0, name=legent[0], type_='value'),
opts.ParallelAxisOpts(dim=1, name=legent[1], type_='value'),
opts.ParallelAxisOpts(dim=2, name=legent[2], type_='value'),
opts.ParallelAxisOpts(dim=3, name=legent[3], type_='value'),
opts.ParallelAxisOpts(dim=4, name=legent[4], type_='value'),
opts.ParallelAxisOpts(dim=5, name=legent[5], type_='value'),
opts.ParallelAxisOpts(dim=6, name='招生年份', type_='category',data=y_data),
]

)
# 添加数据,平行坐标图的数据结构[[],[],[],...,[]] 或[(),(),...,()]
.add('招生人数', data=data1,linestyle_opts=opts.LineStyleOpts(width=4,opacity=0.5))
# .add('机械工程', data=data2)
# .add('生物科学', data=data3)
# .set_global_opts()
# .set_series_opts()
.render()
)

4.饼图

这是图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from pyecharts.charts import Bar,Pie
import pandas as pd
from pyecharts import options as opt
data = pd.read_excel('./居民人均消费支出.xls')
print(data)
label_data = list(data.iloc[0])[2:]
world_data = list(data.iloc[1][2:])
print(label_data)
print(world_data)
a_data = []
length = len(label_data)
for i in range(len(label_data)):
a_data.append([label_data[i],world_data[i]])
b_data = []
for i in range(len(data)):
if i >1:
b_data.append([data.iloc[i].iloc[0],data.values[i][1]])
print(b_data)
print(a_data)
pie = (
Pie(init_opts=opt.InitOpts(width='100%')).set_global_opts(
legend_opts=opt.LegendOpts(is_show=False),
tooltip_opts=opt.TooltipOpts(
formatter="{b}:{d}%"
)
).add('',a_data,center=['20%','50%'],radius='40%')
.add('',b_data,center=['70%','50%'],radius='40%')
.set_series_opts(
label_opts=opt.LabelOpts(formatter="{b}:{c}"))
.render("pie.html")
)


5.堆积柱形图

这是图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts

# print(pyecharts.__version__)
# 柱状图
df = pd.read_csv("./广播电视情况.csv",encoding='gbk')
x_data=list(df)[2:7]
index1 = 0
index2 = 0
for i in range(len(df)):
if df.iloc[i].iloc[0] == "进口电影票房收入(亿元)":
index1 = i

if df.iloc[i].iloc[0] == "国产电影票房收入(亿元)":
index2 = i

show1 = list(df.values[index1][2:7])
show2 = list(df.values[index2][2:7])
print(x_data)
print(show1)
print(show2)

bar = (
Bar(init_opts=opts.InitOpts(width='1200px',height='900px'))
.set_global_opts(
title_opts=opts.TitleOpts(title='五年期间国产与进口电影票房收入',subtitle='单位:亿元',pos_left='center',text_align='center'),
legend_opts=opts.LegendOpts(pos_left='right',orient='vertical',pos_top=30),
toolbox_opts=opts.ToolboxOpts(is_show=True),
datazoom_opts=opts.DataZoomOpts(is_show=True,pos_top=850),
xaxis_opts=opts.AxisOpts(name='年份'),
yaxis_opts=opts.AxisOpts(name='收入'),
graphic_opts=opts.GraphicGroup(children=[
opts.GraphicText(
graphic_item=opts.GraphicItem(
z=100,
position=[120,885]
),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
# 文本内容
text='数据来源:国家统计局',
# 文字样式
font='15px Microsoft YaHei',
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
# 文字配上猛男色
fill='black'
)
)
)
])
)
.add_xaxis(x_data)
.add_yaxis("进口电影票房收入(亿元)",show1,stack='num')
.add_yaxis("国产电影票房收入(亿元)",show2,stack='num')
.render('mypycharts.html')
)


6.折线图柱形图

这是图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

import pandas as pd
from pyecharts.charts import Bar,Line
from pyecharts import options as opts
df = pd.read_excel("./城市绿地面积.xls")
x_data =list(df)[1:6]
index1 = 0
index2 = 0
for i in range(len(df)):
if df.iloc[i].iloc[0] == "城市绿地面积(万公顷)":
index1 = i
if df.iloc[i].iloc[0] == "建成区绿化覆盖率(%)":
index2 = i
show1 = list(df.values[index1][2:7])
show2 = list(df.values[index2][2:7])
print(x_data)
print(show1)
print(show2)

bar = Bar(init_opts=opts.InitOpts(width='100%', height='600px', page_title='my_pyecharts')).set_global_opts(
title_opts=opts.TitleOpts(title='五年期间城市绿地面积',subtitle='单位:万公顷'),
graphic_opts=opts.GraphicGroup(children=[
opts.GraphicText(
graphic_item=opts.GraphicItem(
z=100,
position=[120,550]
),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text='数据来源:国家统计局',
font='15px Microsoft YaHei',
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill='black'
)
)
)])
)
bar.add_xaxis(x_data)
bar.add_yaxis('城市绿地面积(万公顷)', show1,bar_width='50px')
# 在右边添加一条y轴
bar.extend_axis(
yaxis=opts.AxisOpts(
name='建成区绿化覆盖率(%)',
type_='value',
position='right',
axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='red'))
)
)

line = (
Line().add_xaxis(x_data)
.add_yaxis('建成区绿化覆盖率(%)',show2,yaxis_index=1)

)


# 将折线图叠加到柱状图上
bar.overlap(line)

bar.render('折线图与柱状图.html')