plotly 改变标记(marker)和直线(line)的风格

编程入门 行业动态 更新时间:2024-10-04 15:31:59

plotly 改变标记(marker)和<a href=https://www.elefans.com/category/jswz/34/1760840.html style=直线(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:设置标记的颜色。接受一个特定的颜色或者一个数字数组,数组中的数会根据数组中的最大值和最小值映射到色阶上,或者根据 cmincmax (如果设置了)映射到色阶上。
      • 注:如果传入列表,那么列表长度必须等于传入的数据长度。列表中不仅可以是数字,也可以是颜色,如果为数字,那么必须搭配色柱 colorscale 使用,如果是颜色,则不需要色柱。一般柱状图 bar 传入颜色,以设置每个柱子的颜色。
    • cauto:是否根据输入 color 列表的数字数据自动计算 cmincmax,只有 color 传入了数值型列表才有效。默认值为 True ,如果指定了 cmincmax,那么该属性会自动设置为 False
    • cmin:设置色阶的下界,只有 color 传入了数值型列表才有效。如果指定了该属性,那么 cmax 也必须指定
    • cmid:通过缩放 cmincmax 设置色阶的中点。只有 color 传入了数值型列表才有效。当 cautoFalse 时无效。
    • cmax:设置色阶的上界,只有 color 传入了数值型列表才有效。如果指定了该属性,那么 cmin 也必须指定
    • reversescale:是否逆序颜色映射,只有当 color 为数值型列表时有效,如果为 Truecmin 将代表数组中的最后一个颜色、cmax 将代表数组中的第一个颜色
    • colorscale:设置色阶,只有当 color 设置为数值型数组时才有效。colorscale 必须是一个包含将归一化的后的数映射到 rgb、rgba、hex、hsl、hsv 或命名颜色字符串的数组,最低需要包含0和1的映射情况,例如:[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]。可以使用 cmincmax 控制色阶的边界。此外,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的整数。
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)的风格

本文发布于:2024-02-14 07:38:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762118.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:直线   标记   风格   plotly   line

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!