如何在仪表图表中旋转表盘?使用python plotly

时间:2016-05-26 07:38:18

标签: python plotly

我最近在python中使用 plotly 包作为计量表。

完成教程和模板here后, 我想知道是否有办法旋转"表盘"或"针"给出一个角度值?

有人建议我使用css:转换来做这个伎俩,但我仍然很难知道如何将css应用于剧情剧本。

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

3 个答案:

答案 0 :(得分:1)

这个问题有点晚了。我对这个问题的解决方案虽然仍然需要工作,但是:

我在剧情教程中使用了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'

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

答案 1 :(得分:0)

不知道为什么,但是上述解决方案对我不起作用。但是,如果尝试输入几个值,则会发现x和y轴不在同一比例上。您可以通过查看每个比例尺之间的半径比例来找到常数。结果很简单,除了将x笛卡尔坐标乘以C = 0.25之外,其他所有内容都与@jvrsgsty答案相同。

因此,字面上的作用与@jvrsgsty建议的相同,但x坐标现在为:

x = h + r*math.cos(theta)*C

答案 2 :(得分:0)

就我而言,@ jvrsgsty提供的解决方案需要进行一些修改才能起作用。 那就是我最终解决它的方式:

h = 0.24
k = 0.5
r = 0.15
# Map my_raw_value to degrees. my_raw_value is between 0 and 300
theta = (100 - my_raw_value) * 180 / 100
# 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'