v = Faker.choose() c = ( Pie() .add( "", [list(z) for z in zip(v, Faker.values())], # 两个值 radius=["30%", "60%"], # 大小 center=["25%", "50%"], # 位置 rosetype="radius", label_opts=opts.LabelOpts(is_show=False), # 不在图形上显示数据 ) .add( "", [list(z) for z in zip(v, Faker.values())], radius=["30%", "60%"], center=["75%", "50%"], rosetype="area", ) .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例")) ) c.render_notebook()
时间: 2024-04-26 20:20:32 浏览: 198
这是一个使用 pyecharts 库绘制的玫瑰图(rose chart)示例,其中使用了 Faker 库生成了一些随机数据。玫瑰图是一种基于极坐标系的饼图,通过将圆周分成多个扇形,来展示数据的分布情况。在代码中,使用了 Pie 类来创建图形对象,并通过 add 方法向图形中添加两个扇形。radius 参数控制扇形的大小,center 参数控制扇形的位置,rosetype 参数控制玫瑰图的类型,label_opts 参数控制数据标签的显示。最后,使用 set_global_opts 方法设置图形的标题。c.render_notebook() 方法用于在 Jupyter Notebook 中显示图形。
相关问题
from pyecharts.charts import Line from pyecharts.charts import Bar from pyecharts.charts import Pie from pyecharts.charts import Grid from pyecharts import options as opts # 柱状图 from pyecharts.charts import Bar from pyecharts import options as opts bar=Bar() bar.add_xaxis(["衬衫","毛衣","领带","裤子","风衣","高跟鞋","袜子"]) bar.add_yaxis("商家A",[120,56,28,98,129,28,107]) bar.add_yaxis("商家B",[60,140,153,145,160,70,54]) bar.set_global_opts(title_opts=opts.TitleOpts(title="商家A和商家B销售情况柱状图")) bar.render() # 折线图 from pyecharts.charts import Line from pyecharts import options as opts from pyecharts.globals import ThemeType,RenderType x_data=['1月','2月','3月','4月','5月','6月'] y_data1=[2,4.9,7,23.2,25.6,76.7] y_data2=[2.6,5.9,9,26.4,28.7,70.7] y_data3=[2,2.2,3.3,4.5,6.3,10.2] line=( Line() .add_xaxis(x_data) .add_yaxis('蒸发量',y_data1) .add_yaxis('降水量',y_data2) .add_yaxis('平均温度',y_data3) ) line.render("zhexiantu.html") # 饼图 from pyecharts.faker import Faker from pyecharts.charts import Pie import pyecharts.options as opts Faker.choose() Faker.values() list(zip(Faker.choose(),Faker.values())) pie=( Pie() .add('',[list(x) for x in zip(["衬衫","毛衣","领带","裤子","风衣","高跟鞋","袜子"],[120,56,28,98,129,28,107])],center=[450,300],radius=[0,100]) ) pie.set_global_opts(title_opts=opts.TitleOpts(title='销售情况饼图',subtitle='商家A')) pie.render() # 多图布局 grid=( Grid() .add(bar,grid_opts=opts.GridOpts(pos_left="70%")) .add(line,grid_opts=opts.GridOpts(pos_right="70%")) .add(pie,grid_opts=opts.GridOpts(pos_bottom="80%")) ) grid.render("2102010216-刘云龙.html")换成matplotlib和pandas
好的,以下是将代码转换为使用 matplotlib 和 pandas 的版本:
```python
import matplotlib.pyplot as plt
import pandas as pd
# 柱状图
df_bar = pd.DataFrame({
'商品': ["衬衫","毛衣","领带","裤子","风衣","高跟鞋","袜子"],
'商家A': [120,56,28,98,129,28,107],
'商家B': [60,140,153,145,160,70,54]
})
ax = df_bar.plot(x='商品', kind='bar')
ax.set_title('商家A和商家B销售情况柱状图')
plt.show()
# 折线图
df_line = pd.DataFrame({
'月份': ['1月','2月','3月','4月','5月','6月'],
'蒸发量': [2,4.9,7,23.2,25.6,76.7],
'降水量': [2.6,5.9,9,26.4,28.7,70.7],
'平均温度': [2,2.2,3.3,4.5,6.3,10.2]
})
ax = df_line.plot(x='月份', kind='line')
ax.set_title('蒸发量、降水量和平均温度折线图')
plt.show()
# 饼图
df_pie = pd.DataFrame({
'商品': ["衬衫","毛衣","领带","裤子","风衣","高跟鞋","袜子"],
'销售量': [120,56,28,98,129,28,107]
})
ax = df_pie.plot(kind='pie', y='销售量', labels=df_pie['商品'], autopct='%1.1f%%', startangle=90)
ax.set_title('销售情况饼图')
plt.show()
# 多图布局
fig, axs = plt.subplots(ncols=3)
# 柱状图
df_bar.plot(x='商品', kind='bar', ax=axs[0])
axs[0].set_title('商家A和商家B销售情况柱状图')
# 折线图
df_line.plot(x='月份', kind='line', ax=axs[1])
axs[1].set_title('蒸发量、降水量和平均温度折线图')
# 饼图
df_pie.plot(kind='pie', y='销售量', labels=df_pie['商品'], autopct='%1.1f%%', startangle=90, ax=axs[2])
axs[2].set_title('销售情况饼图')
plt.tight_layout()
plt.show()
```
注意:由于 pandas 的 `plot()` 函数默认使用的是 matplotlib,因此在使用 pandas 绘图时其实已经间接使用了 matplotlib。
## 上面的代码都一样, page = Page(layout=Page.DraggablePageLayout) page.add( page = Page(layout=Page.DraggablePageLayout, init_opts=opts.InitOpts(theme=ThemeType.CHALK)), bar_film(), line_ranking(), pie_circletype(), WordCloud_wc(), Map_worldmap(), ) page.render("page_draggable_layout.html")File "<ipython-input-43-210a50f6b8d2>", line 5 line_ranking(), ^ SyntaxError: positional argument follows keyword argument修改以上代码,并以一个可以固定BI大屏中图片位置的结果输出
可以使用 Grid 类型的页面布局来实现BI大屏中图片位置的固定。以下是修改后的代码:
```python
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Pie, WordCloud, Map, Page
from pyecharts.globals import ThemeType
from pyecharts.faker import Faker
# 设置主题
opts.defaults.theme = ThemeType.CHALK
# 柱状图
def bar_film() -> Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("电影", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="电影票房排行榜"))
)
return c
# 折线图
def line_ranking() -> Line:
c = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="商家排名"))
)
return c
# 饼图
def pie_circletype() -> Pie:
c = (
Pie()
.add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
.set_global_opts(title_opts=opts.TitleOpts(title="圆环图示例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return c
# 词云图
def WordCloud_wc() -> WordCloud:
c = (
WordCloud()
.add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
.set_global_opts(title_opts=opts.TitleOpts(title="词云示例"))
)
return c
# 地图
def Map_worldmap() -> Map:
c = (
Map()
.add("世界地图", [list(z) for z in zip(Faker.country, Faker.values())], "world")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="世界地图示例"))
)
return c
# 创建页面
page = Page(layout=Page.SimplePageLayout)
# 将各个图表添加到页面中
page.add(bar_film())
page.add(line_ranking())
page.add(pie_circletype())
page.add(WordCloud_wc())
page.add(Map_worldmap())
# 将页面转为Grid类型的布局,并设置各个图表的位置
page.grid = [
{"pos": [0, 0], "span": [6, 6], "chart_id": 0},
{"pos": [6, 0], "span": [6, 6], "chart_id": 1},
{"pos": [0, 6], "span": [6, 6], "chart_id": 2},
{"pos": [6, 6], "span": [6, 6], "chart_id": 3},
{"pos": [2, 12], "span": [10, 10], "chart_id": 4},
]
# 渲染页面并保存为HTML文件
page.render("page_grid_layout.html")
```
修改后的代码使用了 `Page.SimplePageLayout` 布局,这种布局方式可以将不同的图表放置在网页的不同位置。通过修改 `page.grid` 属性,可以控制各个图表在页面中的位置和大小。在本例中,我们将各个图表放置在一个 `6x6` 的网格中的不同位置,并将词云图和地图放置在一个 `10x10` 的网格中,使它们占据页面的中间位置。
阅读全文