python - 如何在仪表盘中旋转刻度盘?巧妙地使用 python

标签 python plotly

我最近开始使用 plotly 包在 python 中制作仪表图。

完成教程和模板后here , 我想知道是否有一种方法可以在给定角度值的情况下旋转“表盘”或“指针”?

有人建议我使用 css: transform 来解决这个问题,但我仍然很难知道如何将 css 应用于 plotly 脚本。

一个简短的代码会很棒。 提前谢谢你。

最佳答案

这个问题有点晚了。我对这个问题的解决方案是:

我使用的是 plotly 教程中给出的表盘的 svg 路径,即

M 0.235 0.5 L 0.24 0.65 L 0.245 0.5 Z

圆心 (0.24,0.65) 接触仪表内部的圆弧。因此,拱门是圆心为 (0.24,0.5) 且半径为 0.15 的圆。

给定一个以弧度为单位的角 theta,一个圆心 (h,k),并用极坐标形式表示一个圆,我们可以很容易地获得点的笛卡尔坐标该度数的圆如下:

x = h +  r * cos(theta)
y = k +  r * sin(theta)

然后我们可以简单地将我们的输入映射到它在仪表上应该具有的预期角度,并从那里计算 xy。对于我在 python 中的实现,使用 math 库,这转换为以下内容:

h = 0.24
k = 0.5
r = 0.15
# Map my_raw_value to degrees. my_raw_value is between 0 and 300
theta = my_raw_value * 180 / 300
# and then into radians
theta = theta * math.pi / 180
x = h + r*math.cos(theta)
y = k + r*math.sin(theta)
path = 'M 0.235 0.5 L ' + str(x) + ' ' + str(y) + ' L 0.245 0.5 Z'

这将为您的形状动态生成三角形路径,并粗略地将表盘的长边设置在应有的位置。理想情况下,我们希望旋转整个事物,因为在此实现中,三角形的底边保持静止,从而在图形的边界上形成一条直线。 您需要将路径上的所有三个点乘以旋转矩阵以获得精确坐标。

关于python - 如何在仪表盘中旋转刻度盘?巧妙地使用 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37454438/

相关文章:

python - 使用日期时间索引绘制数据框

python - 在Python中是否有一种正确的方法来实现具有与其父类(super class)不同的方法签名的子类?

r - 绘图标记大小

python - 如何更改 Plotly 保存图像的图像大小?

css - django-plotly-dash div 大小太小,不会改变

python - Django 表格 : Get selected item from ModelChoiceField?

Python - 如何改变像é这样的字母

python - 我可以部分覆盖 __setattr__ 吗?

R plotly : Adjust absolute marker size on 3D scatterplot

python - 在不使用 Plotly Express 的情况下向 Plotly 子图添加垂直矩形