![Plotly Tutorial](/plotly/images/plotly-mini-logo.jpg)
- Plotly 教程
- Plotly - 首页
- Plotly - 简介
- Plotly - 环境设置
- Plotly - 在线和离线绘图
- 在 Jupyter Notebook 中内联绘图
- Plotly - 包结构
- Plotly - 导出为静态图像
- Plotly - 图例
- Plotly - 格式化轴和刻度
- Plotly - 子图和嵌入图
- Plotly - 条形图和饼图
- Plotly - 散点图、Scattergl 图和气泡图
- Plotly - 点图和表格
- Plotly - 直方图
- Plotly - 箱线图、小提琴图和等高线图
- Plotly - Distplots、密度图和误差条形图
- Plotly - 热图
- Plotly - 极坐标图和雷达图
- Plotly - OHLC 图、瀑布图和漏斗图
- Plotly - 3D 散点图和曲面图
- Plotly - 添加按钮/下拉菜单
- Plotly - 滑块控件
- Plotly - FigureWidget 类
- Plotly 与 Pandas 和 Cufflinks
- Plotly 与 Matplotlib 和 Chart Studio
- Plotly 有用资源
- Plotly - 快速指南
- Plotly - 有用资源
- Plotly - 讨论
Plotly - 条形图和饼图
在本章中,我们将学习如何借助 Plotly 创建条形图和饼图。让我们首先了解条形图。
条形图
条形图使用矩形条表示分类数据,条形的高度或长度与其表示的值成正比。条形图可以垂直或水平显示。它有助于显示离散类别之间的比较。图表的一个轴显示要比较的特定类别,另一个轴表示测量的值。
以下示例绘制了一个简单的**条形图**,显示了不同课程的学生注册人数。**go.Bar()** 函数返回一个条形轨迹,其 x 坐标设置为科目列表,y 坐标设置为学生人数。
import plotly.graph_objs as go langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [23,17,35,29,12] data = [go.Bar( x = langs, y = students )] fig = go.Figure(data=data) iplot(fig)
输出结果如下所示:
![Bar Chart](/plotly/images/bar_chart.jpg)
要显示分组条形图,必须将 Layout 对象的**barmode** 属性设置为**group**。在以下代码中,表示每一年学生人数的多个轨迹相对于科目绘制,并显示为分组条形图。
branches = ['CSE', 'Mech', 'Electronics'] fy = [23,17,35] sy = [20, 23, 30] ty = [30,20,15] trace1 = go.Bar( x = branches, y = fy, name = 'FY' ) trace2 = go.Bar( x = branches, y = sy, name = 'SY' ) trace3 = go.Bar( x = branches, y = ty, name = 'TY' ) data = [trace1, trace2, trace3] layout = go.Layout(barmode = 'group') fig = go.Figure(data = data, layout = layout) iplot(fig)
其输出结果如下所示:
![Grouped Bar Chart](/plotly/images/grouped_bar_chart.jpg)
**barmode** 属性决定了在图形上如何显示位于相同位置坐标处的条形。定义的值为“stack”(条形堆叠在一起),“relative”(条形堆叠在一起,负值位于轴下方,正值位于轴上方),“**group**”(条形并排绘制)。
通过将 barmode 属性更改为“**stack**”,绘制的图形如下所示:
![Stack Plotted Graph](/plotly/images/stack_plotted_graph.jpg)
饼图
饼图仅显示一个数据系列。**饼图**显示一个数据系列中项目的尺寸(称为**扇形**),与项目的总和成正比。数据点显示为整个饼图的百分比。
**graph_objs** 模块中的**pie()** 函数 - **go.Pie()**,返回一个饼图轨迹。两个必需的参数是**labels** 和**values**。让我们绘制一个简单的语言课程与学生人数的饼图,如以下示例所示。
import plotly plotly.tools.set_credentials_file( username = 'lathkar', api_key = 'U7vgRe1hqmRp4ZNf4PTN' ) from plotly.offline import iplot, init_notebook_mode init_notebook_mode(connected = True) import plotly.graph_objs as go langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [23,17,35,29,12] trace = go.Pie(labels = langs, values = students) data = [trace] fig = go.Figure(data = data) iplot(fig)
以下输出显示在 Jupyter Notebook 中:
![Pie Chart](/plotly/images/pie_chart.jpg)
**环形图**是一种饼图,中间有一个圆形孔,使其看起来像甜甜圈。在以下示例中,两个环形图以 1X2 网格布局显示。虽然两个饼图轨迹的“**label**”布局相同,但每个子图的行和列目标由 domain 属性决定。
为此,我们使用 2019 年议会选举中各政党席位和得票率的数据。在 Jupyter Notebook 单元格中输入以下代码:
parties = ['BJP', 'CONGRESS', 'DMK', 'TMC', 'YSRC', 'SS', 'JDU','BJD', 'BSP','OTH'] seats = [303,52,23,22,22,18,16,12,10, 65] percent = [37.36, 19.49, 2.26, 4.07, 2.53, 2.10, 1.46, 1.66, 3.63, 25.44] import plotly.graph_objs as go data1 = { "values": seats, "labels": parties, "domain": {"column": 0}, "name": "seats", "hoverinfo":"label+percent+name", "hole": .4, "type": "pie" } data2 = { "values": percent, "labels": parties, "domain": {"column": 1}, "name": "vote share", "hoverinfo":"label+percent+name", "hole": .4, "type": "pie" } data = [data1,data2] layout = go.Layout( { "title":"Parliamentary Election 2019", "grid": {"rows": 1, "columns": 2}, "annotations": [ { "font": { "size": 20 }, "showarrow": False, "text": "seats", "x": 0.20, "y": 0.5 }, { "font": { "size": 20 }, "showarrow": False, "text": "votes", "x": 0.8, "y": 0.5 } ] } ) fig = go.Figure(data = data, layout = layout) iplot(fig)
其输出结果如下所示:
![Donut Chart](/plotly/images/donut_chart.jpg)