直线(line)的风格"/>
plotly 改变标记(marker)和直线(line)的风格
标记(markers)和直线(lines)的风格
import plotly.io as pio
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
import numpy as np# 设置plotly默认主题
pio.templates.default = 'plotly_white'# 设置pandas打印时显示所有列
pd.set_option('display.max_columns', None)
样式汇总
官方示例:/
参数说明:/
go.Scatter、fig.update_traces(marker=dict(…), selector=dict(type=‘scatter’))、fig.update_shapes
- line:直线样式设置。字典类型,可取属性如下:
- color:直线的颜色
- dash:直线的样式
- 可取样式字符串
'solid'
(默认值)、'dot'
、'dash'
、'longdash'
、'dashdot'
、'longdashdot'
或一个字符串长度列表,例如:“5px,10px,2px,2px”,即:绘画5px的短线,空10px,画2px短线,空2px
- 可取样式字符串
- shape:确定直线的形状。取
'spline'
时,直线使用样条插值方式绘制,其他值对应于分段式的线型- 可取
'linear'
(默认值)、'spline'
、'hv'
、'vh'
、'hvh'
、'vhv'
- 可取
- simplify:是否通过移除相邻近似的点来简化线条。在过度线(transitioning lines)时,可能需要禁用此功能,这样产生的SVG路径上的点的数量就不会受到影响
- smoothing:仅仅当
shape='spline'
时有效,设置平滑程度。0表示无平滑(等价于shape='linear'
)- [0, 1.3] 之间的浮点数,默认值为 1
- width:设置线条宽度
- 大于等于0的整数,默认值为2
fig = go.Figure()line_dash = ['solid', 'dot', 'dash', 'longdash', 'dashdot', 'longdashdot']
for i, d in enumerate(line_dash):fig.add_trace(go.Scatter(x=[0, 10], y=[i, i], mode='lines', line=dict(dash=d, width=3,),showlegend=False))fig.update_layout(width=600, height=500,yaxis=dict(type='category',tickvals=list(range(len(line_dash))),ticktext=line_dash,showgrid=False),xaxis_showticklabels=False,xaxis_showgrid=False,
)fig.write_image('../pic/lines_1.png', scale=10)
fig.show()
fig = go.Figure()line_dash = ['5px,10px,3px,2px', '10px,10px,5px,5px,3px','30px','30px,10px']
for i, d in enumerate(line_dash):fig.add_trace(go.Scatter(x=[0, 10], y=[i, i], mode='lines', line_dash=d,showlegend=False))fig.update_layout(width=600, height=500,yaxis=dict(type='category',tickvals=list(range(len(line_dash))),ticktext=line_dash,showgrid=False),xaxis_showticklabels=False,xaxis_showgrid=False,
)fig.write_image('../pic/lines_2.png', scale=10)
fig.show()
- marker:
- symbol:设置标记的类型,末尾追加 100 等价于追加 “-open”, 追加 200 等价于追加 “-dot”,追加 300 等价于追加 “-open-dot” 或 “dot-open”。详细取值请看下面的样例
- size:设置标记大小,大于等于0的整数,默认值为6
- opacity:设置标记的不透明度,[0, 1]之间的浮点数
- color:设置标记的颜色。接受一个特定的颜色或者一个数字数组,数组中的数会根据数组中的最大值和最小值映射到色阶上,或者根据
cmin
和cmax
(如果设置了)映射到色阶上。- 注:如果传入列表,那么列表长度必须等于传入的数据长度。列表中不仅可以是数字,也可以是颜色,如果为数字,那么必须搭配色柱
colorscale
使用,如果是颜色,则不需要色柱。一般柱状图 bar 传入颜色,以设置每个柱子的颜色。
- 注:如果传入列表,那么列表长度必须等于传入的数据长度。列表中不仅可以是数字,也可以是颜色,如果为数字,那么必须搭配色柱
- cauto:是否根据输入
color
列表的数字数据自动计算cmin
和cmax
,只有color
传入了数值型列表才有效。默认值为True
,如果指定了cmin
和cmax
,那么该属性会自动设置为False
- cmin:设置色阶的下界,只有
color
传入了数值型列表才有效。如果指定了该属性,那么cmax
也必须指定 - cmid:通过缩放
cmin
和cmax
设置色阶的中点。只有color
传入了数值型列表才有效。当cauto
为False
时无效。 - cmax:设置色阶的上界,只有
color
传入了数值型列表才有效。如果指定了该属性,那么cmin
也必须指定 - reversescale:是否逆序颜色映射,只有当
color
为数值型列表时有效,如果为True
,cmin
将代表数组中的最后一个颜色、cmax
将代表数组中的第一个颜色 - colorscale:设置色阶,只有当
color
设置为数值型数组时才有效。colorscale
必须是一个包含将归一化的后的数映射到 rgb、rgba、hex、hsl、hsv 或命名颜色字符串的数组,最低需要包含0和1的映射情况,例如:[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]
。可以使用cmin
和cmax
控制色阶的边界。此外,colorscale
也可以是下面的这些字符串:'Blackbody'
、'Bluered'
、'Blues'
、'Cividis'
、'Earth'
、'Electric'
、'Greens'
、'Greys'
、'Hot'
、'Jet'
、'Picnic'
、'Portland'
、'Rainbow'
、'RdBu'
、'Reds'
、'Viridis'
、'YlGnBu'
、'YlOrRd'
- showscale:是否显示色柱,只有当
color
设置为数字数组时才有效。 - colorbar:色柱相关设置
- gradient:渐变色,字典类型,可取属性如下:
- color:设置最终渐变色,‘radial’ 为中心色,‘horizontal’ 为右侧,‘vertical’ 为底部。字符串或颜色数组
- type:设置渐变色填充标记的类型
- 字符串枚举类型,或者字符串枚举类型的列表。可取
'radial'
、'horizontal'
、'vertical'
、'none'
(默认值)
- 字符串枚举类型,或者字符串枚举类型的列表。可取
- line:标记点的线条设置,字典类型,可取属性如下:
- color:同marker的
color
- cauto:同marker的
cauto
- cmin:同marker的
cmin
- cmid:同marker的
cmid
- cmax:同marker的
cmax
- colorscale:同marker的
colorscale
- reversescale:同marker的
reversescale
- width:设置线条的宽度,大于等于0的整数。
- color:同marker的
import plotly.graph_objects as go
from plotly.validators.scatter.marker import SymbolValidatorraw_symbols = SymbolValidator().values
namestems = []
namevariants = []
symbols = []
for i in range(0,len(raw_symbols),3):name = raw_symbols[i+2]symbols.append(raw_symbols[i])namestems.append(name.replace("-open", "").replace("-dot", ""))namevariants.append(name[len(namestems[-1]):])fig = go.Figure(go.Scatter(mode="markers", x=namevariants, y=namestems, marker_symbol=symbols,marker_line_color="midnightblue", marker_color="lightskyblue",marker_line_width=2, marker_size=15,hovertemplate="name: %{y}%{x}<br>number: %{marker.symbol}<extra></extra>"))
fig.update_layout(title="Mouse over symbols for name & number!",xaxis_range=[-1,4], yaxis_range=[len(set(namestems)),-1],margin=dict(b=0,r=0), xaxis_side="top", height=1400, width=400)
fig.show()
df = px.data.iris()
print(df.head(3))fig = px.scatter(df, x='sepal_width', y='petal_width')fig.update_traces(marker=dict(color=[i for i in range(150)],colorscale='Electric',showscale=True,symbol='x-open-dot',)
)fig.write_image('../pic/markers_2.png', scale=2)
fig.show()
df = px.data.iris()
print(df.head(3))fig = px.scatter(df, x='sepal_width', y='petal_width')fig.update_traces(marker=dict(color=[i for i in range(150)],cmin=50, cmax=100,colorscale=[[0, '#0d47a1'], [0.5, '#e3f2fd'], [1, '#d50000']],showscale=True,symbol='x-open-dot',)
)fig.write_image('../pic/markers_3.png', scale=2)
fig.show()
fig = px.bar(x=['a', 'b', 'c', 'd'], y=[6, 4 ,8, 3])fig.update_traces(marker=dict(color=['#e57373', '#9575cd', '#4fc3f7', '#81c784'])
)fig.update_layout(width=600, height=400
)fig.write_image('../pic/markers_4.png', scale=2)
fig.show()
fig = px.bar(x=['a', 'b', 'c', 'd'], y=[6, 4 ,8, 3])fig.update_traces(marker=dict(color=['#e57373', '#9575cd', '#4fc3f7', '#81c784'],line=dict(width=2, color='black'))
)fig.update_layout(width=600, height=400
)fig.write_image('../pic/markers_5.png', scale=2)
fig.show()
fig = go.Figure()fig.add_trace(go.Scatter(x=list(range(10)), y=[2 for _ in range(10)], mode='markers',marker=dict(size=30, gradient={'color': '#f0acf7', 'type': 'horizontal'},line_width=0,))
)fig.add_trace(go.Scatter(x=list(range(10)), y=[3 for _ in range(10)], mode='markers',marker=dict(size=30,color='rgba(0, 0, 0, 0)', # 使用a属性将填充颜色设为透明line=dict(width=2,color=list(range(10)),colorscale=[[0, '#f7f0ac'], [0.5, '#acf7f0'], [1, '#f0acf7']],)))
)fig.write_image('../pic/markers_6.png', scale=2)
fig.show()
fig = px.bar(x=['a', 'b', 'c', 'd', 'e', 'f', 'g'], y=[6, 4 ,8, 3, 9, 6, 2])# 使用 color=list(range(...)) 搭配 colorscale,可以实现渐变色的效果
fig.update_traces(marker=dict(color=list(range(7)),colorscale=[[0, '#f7f0ac'], [0.5, '#acf7f0'], [1, '#f0acf7']],)
)fig.update_layout(width=600, height=400
)# fig.write_image('../pic/markers_7.png', scale=2)
fig.show()
更多推荐
plotly 改变标记(marker)和直线(line)的风格
发布评论