情节:如何自定义3D散点图的符号?

尼西拉

在下面的示例中:

import plotly.express as px
df = px.data.iris()
fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width',
                    color='petal_length', symbol='species')
fig.show()

在此处输入图片说明 symbol由所确定的'species'由圆圈,菱形和正方形表示。当样本数量变大并且样本点涂抹了绘图时,这可能不是很清楚。我们如何自定义符号,例如使用圆形,正方形和十字形(或其他形状的对比组合)?


更新:

我将代码应用于另一个数据集和代码:

fig = px.scatter_3d(df8, x='X', y='Y', z='Z',
                    color='P', symbol='C')

# specify trace names and symbols in a dict
symbols = {'True': 'cross',
           'False':'circle-open'}

# set all symbols in fig
for i, d in enumerate(fig.data):
    fig.data[i].marker.symbol = symbols[fig.data[i].name]

fig.show()

其中C具有两个值:TrueFalse但是它捕获了错误:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-183-ea1e2ec7dd8e> in <module>
     36 # set all symbols in fig
     37 for i, d in enumerate(fig.data):
---> 38     fig.data[i].marker.symbol = symbols[fig.data[i].name]
     39 
     40 fig.show()

KeyError: 'P, True'

更新:

可重现的示例:

{'ID': {0: '672590',
  1: '672120',
  2: '672090',
  3: '672349',
  4: '672453',
  5: '672560',
  6: '672051',
  7: '880505',
  8: '672593',
  9: '880097',
  10: '891458',
  11: '672091',
  12: '672569',
  13: '672603',
  14: '790030',
  15: '672350',
  16: '673480',
  17: 'I00042',
  18: '880297',
  19: '894620'},
 'X': {0: 0.20111215435497176,
  1: 0.21248998904335528,
  2: 0.2086689759935364,
  3: 0.22337836085443835,
  4: 0.17847099434376115,
  5: 0.24827331723865761,
  6: 0.14411891907440183,
  7: 0.20863940038267367,
  8: 0.166299824101773,
  9: 0.20548401328860527,
  10: 0.18007828100726822,
  11: 0.21887731187605308,
  12: 0.1971207940494219,
  13: 0.19247420041228508,
  14: 0.21605657330040987,
  15: 0.15779241902165092,
  16: 0.22536060645732897,
  17: 0.19268784843224268,
  18: 0.2400112771421119,
  19: 0.22548124117213691},
 'Y': {0: 2473.923076923077,
  1: 2031.1538461538462,
  2: 2383.1923076923076,
  3: 1830.7692307692307,
  4: 1780.2307692307693,
  5: 1194.8461538461538,
  6: 1641.0,
  7: 1563.3076923076924,
  8: 1246.2307692307693,
  9: 931.6153846153846,
  10: 1207.076923076923,
  11: 799.6538461538462,
  12: 560.8461538461538,
  13: 1158.076923076923,
  14: 1221.6923076923076,
  15: 3030.076923076923,
  16: 1178.076923076923,
  17: 552.3846153846154,
  18: 1380.3076923076924,
  19: 1027.5384615384614},
 'Z': {0: 385.84615384615387,
  1: 288.46153846153845,
  2: 281.9230769230769,
  3: 273.61538461538464,
  4: 252.0,
  5: 231.69230769230768,
  6: 213.30769230769232,
  7: 203.3846153846154,
  8: 191.07692307692307,
  9: 189.46153846153845,
  10: 181.07692307692307,
  11: 176.76923076923077,
  12: 173.30769230769232,
  13: 169.6153846153846,
  14: 166.15384615384616,
  15: 165.30769230769232,
  16: 160.53846153846155,
  17: 159.84615384615384,
  18: 159.0,
  19: 145.3846153846154},
 'C': {0: True,
  1: True,
  2: True,
  3: True,
  4: True,
  5: True,
  6: True,
  7: True,
  8: True,
  9: True,
  10: True,
  11: False,
  12: False,
  13: True,
  14: True,
  15: True,
  16: True,
  17: False,
  18: True,
  19: True},
 'P': {0: 'P',
  1: 'P',
  2: 'P',
  3: 'P',
  4: 'P',
  5: 'X',
  6: 'P',
  7: 'P',
  8: 'P',
  9: 'P',
  10: 'P',
  11: 'P',
  12: 'P',
  13: 'P',
  14: 'P',
  15: 'P',
  16: 'P',
  17: 'X',
  18: 'P',
  19: 'P'}}
背心

答案:

# specify trace names and symbols in a dict
symbols = {'setosa': 'cross',
           'versicolor':'circle-open',
           'virginica':'diamond-open'}

# set all symbols in fig
for i, d in enumerate(fig.data):
    fig.data[i].marker.symbol = symbols[fig.data[i].name]

细节:

在这种情况下,您可以使用以下方式手动设置任何标记符号:

fig.data[<i>].marker.symbol = <symbol>

其中<i>的整数索引指定您要更改的跟踪,而<symbol>3D散布对象属性是一个枚举,可以将其指定为以下枚举值之一:

['circle', 'circle-open', 'square', 'square-open',
'diamond', 'diamond-open', 'cross', 'x']

示例1-单次跟踪:

fig.data[2].marker.symbol = 'circle-open'
fig.show()

情节1:

在此处输入图片说明

示例2-多条迹线:

为了使事情更具动态性,您可以使用以下方法检索所有跟踪名称:

['setosa', 'versicolor', 'virginica']

然后,您可以指定自己的名称和符号词典,并使用以下命令为所有迹线设置所有符号:

# specify trace names and symbols in a dict
symbols = {'setosa': 'cross',
           'versicolor':'circle-open',
           'virginica':'diamond-open'}

# set all symbols in fig
for i, d in enumerate(fig.data):
    fig.data[i].marker.symbol = symbols[fig.data[i].name]

fig.show()

情节2:

在此处输入图片说明

完整的代码:

import plotly.express as px
df = px.data.iris()
fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width',
                    color='petal_length', symbol='species')
#fig.show()

# specify trace names and symbols in a dict
symbols = {'setosa': 'cross',
           'versicolor':'circle-open',
           'virginica':'diamond-open'}

# set all symbols in fig
for i, d in enumerate(fig.data):
    fig.data[i].marker.symbol = symbols[fig.data[i].name]

fig.show()

编辑:由OP回答附录

这里发生的是,你在指定颜色和符号px.scatter3d使用color='P', symbol='C'这会对现在的跟踪名称产生影响'name': 'P, True'这导致以下中断:

for i, d in enumerate(fig.data):
    fig.data[i].marker.symbol = symbols[fig.data[i].name]

根据您定义的符号字典判断:

# specify trace names and symbols in a dict
symbols = {'True': 'cross',
           'False':'circle-open'}

这样看来,您只是想通过最后一部分来区分你的符号'name': 'P, True'whics是TrueFalse您可以通过在中指定符号来将符号字典子集化symbols[fig.data[i].name.split(', ')[1]],从而得到:

在此处输入图片说明

带有数据样本的完整代码:

import pandas as pd
import plotly.express as px

df8 = pd.DataFrame({'ID': {0: '672590',
  1: '672120',
  2: '672090',
  3: '672349',
  4: '672453',
  5: '672560',
  6: '672051',
  7: '880505',
  8: '672593',
  9: '880097',
  10: '891458',
  11: '672091',
  12: '672569',
  13: '672603',
  14: '790030',
  15: '672350',
  16: '673480',
  17: 'I00042',
  18: '880297',
  19: '894620'},
 'X': {0: 0.20111215435497176,
  1: 0.21248998904335528,
  2: 0.2086689759935364,
  3: 0.22337836085443835,
  4: 0.17847099434376115,
  5: 0.24827331723865761,
  6: 0.14411891907440183,
  7: 0.20863940038267367,
  8: 0.166299824101773,
  9: 0.20548401328860527,
  10: 0.18007828100726822,
  11: 0.21887731187605308,
  12: 0.1971207940494219,
  13: 0.19247420041228508,
  14: 0.21605657330040987,
  15: 0.15779241902165092,
  16: 0.22536060645732897,
  17: 0.19268784843224268,
  18: 0.2400112771421119,
  19: 0.22548124117213691},
 'Y': {0: 2473.923076923077,
  1: 2031.1538461538462,
  2: 2383.1923076923076,
  3: 1830.7692307692307,
  4: 1780.2307692307693,
  5: 1194.8461538461538,
  6: 1641.0,
  7: 1563.3076923076924,
  8: 1246.2307692307693,
  9: 931.6153846153846,
  10: 1207.076923076923,
  11: 799.6538461538462,
  12: 560.8461538461538,
  13: 1158.076923076923,
  14: 1221.6923076923076,
  15: 3030.076923076923,
  16: 1178.076923076923,
  17: 552.3846153846154,
  18: 1380.3076923076924,
  19: 1027.5384615384614},
 'Z': {0: 385.84615384615387,
  1: 288.46153846153845,
  2: 281.9230769230769,
  3: 273.61538461538464,
  4: 252.0,
  5: 231.69230769230768,
  6: 213.30769230769232,
  7: 203.3846153846154,
  8: 191.07692307692307,
  9: 189.46153846153845,
  10: 181.07692307692307,
  11: 176.76923076923077,
  12: 173.30769230769232,
  13: 169.6153846153846,
  14: 166.15384615384616,
  15: 165.30769230769232,
  16: 160.53846153846155,
  17: 159.84615384615384,
  18: 159.0,
  19: 145.3846153846154},
 'C': {0: True,
  1: True,
  2: True,
  3: True,
  4: True,
  5: True,
  6: True,
  7: True,
  8: True,
  9: True,
  10: True,
  11: False,
  12: False,
  13: True,
  14: True,
  15: True,
  16: True,
  17: False,
  18: True,
  19: True},
 'P': {0: 'P',
  1: 'P',
  2: 'P',
  3: 'P',
  4: 'P',
  5: 'X',
  6: 'P',
  7: 'P',
  8: 'P',
  9: 'P',
  10: 'P',
  11: 'P',
  12: 'P',
  13: 'P',
  14: 'P',
  15: 'P',
  16: 'P',
  17: 'X',
  18: 'P',
  19: 'P'}})

fig = px.scatter_3d(df8, x='X', y='Y', z='Z',
                    color='P', symbol='C')

# specify trace names and symbols in a dict
symbols = {'True': 'cross',
           'False':'circle-open'}

# set all symbols in fig
for i, d in enumerate(fig.data):
    fig.data[i].marker.symbol = symbols[fig.data[i].name.split(', ')[1]]

fig.show()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

情节:如何自定义3D散点图的符号?

来自分类Dev

情节:如何在散点图中自定义标签?

来自分类Dev

Highcharts-如何在3D散点图上的点工具提示(弹出窗口)中设置自定义内容,或如何自定义点工具提示信息?

来自分类Dev

情节:如何自定义轴转换?

来自分类Dev

如何在JavaFX 8中创建自定义3d模型?

来自分类Dev

如何在Java 3D中设置自定义FPS

来自分类Dev

如何使用three.js绘制自定义3d曲面?

来自分类Dev

如何使用PyVista从列表/数组创建自定义3D对象?

来自分类Dev

Plotly:如何为Plotly 3D Scatter图形创建自定义悬停标签?

来自分类Dev

如何在JavaFX 8中创建自定义3d模型?

来自分类Dev

如何使用three.js绘制自定义3d曲面?

来自分类Dev

如何在Java 3D中设置自定义FPS

来自分类Dev

d3js散点图自定义图标和动画

来自分类Dev

如何使Matplotlib 3D散点图更大?

来自分类Dev

情节:如何根据系列中的差异自定义标记?

来自分类Dev

如何自定义散点图以查看所有标题?

来自分类Dev

如何自定义散点图中的颜色条?

来自分类Dev

如何将自定义标记添加到 mapbox 中的 3D 建筑地图?

来自分类Dev

如何使dbghelp从自定义符号存储中加载符号?

来自分类Dev

如何自定义jzy3d图表

来自分类Dev

情节提要和自定义init

来自分类Dev

JavaFx散点图自定义图例

来自分类Dev

自定义3D图形引擎...在哪里绘制Z坐标

来自分类Dev

具有自定义颜色的Highcharts 3D饼图

来自分类Dev

三个JS创建自定义3D几何

来自分类Dev

将颜色贴图应用于Matplotlib 3D曲面中的自定义轴

来自分类Dev

在magento中基于自定义API的付款方式中实现3D安全验证

来自分类Dev

使用THREE.js通过坐标自定义3D对象

来自分类Dev

matplotlib中的自定义颜色图用于3D表面图

Related 相关文章

  1. 1

    情节:如何自定义3D散点图的符号?

  2. 2

    情节:如何在散点图中自定义标签?

  3. 3

    Highcharts-如何在3D散点图上的点工具提示(弹出窗口)中设置自定义内容,或如何自定义点工具提示信息?

  4. 4

    情节:如何自定义轴转换?

  5. 5

    如何在JavaFX 8中创建自定义3d模型?

  6. 6

    如何在Java 3D中设置自定义FPS

  7. 7

    如何使用three.js绘制自定义3d曲面?

  8. 8

    如何使用PyVista从列表/数组创建自定义3D对象?

  9. 9

    Plotly:如何为Plotly 3D Scatter图形创建自定义悬停标签?

  10. 10

    如何在JavaFX 8中创建自定义3d模型?

  11. 11

    如何使用three.js绘制自定义3d曲面?

  12. 12

    如何在Java 3D中设置自定义FPS

  13. 13

    d3js散点图自定义图标和动画

  14. 14

    如何使Matplotlib 3D散点图更大?

  15. 15

    情节:如何根据系列中的差异自定义标记?

  16. 16

    如何自定义散点图以查看所有标题?

  17. 17

    如何自定义散点图中的颜色条?

  18. 18

    如何将自定义标记添加到 mapbox 中的 3D 建筑地图?

  19. 19

    如何使dbghelp从自定义符号存储中加载符号?

  20. 20

    如何自定义jzy3d图表

  21. 21

    情节提要和自定义init

  22. 22

    JavaFx散点图自定义图例

  23. 23

    自定义3D图形引擎...在哪里绘制Z坐标

  24. 24

    具有自定义颜色的Highcharts 3D饼图

  25. 25

    三个JS创建自定义3D几何

  26. 26

    将颜色贴图应用于Matplotlib 3D曲面中的自定义轴

  27. 27

    在magento中基于自定义API的付款方式中实现3D安全验证

  28. 28

    使用THREE.js通过坐标自定义3D对象

  29. 29

    matplotlib中的自定义颜色图用于3D表面图

热门标签

归档