我最近在python中使用 plotly 包作为计量表。
完成教程和模板here后, 我想知道是否有办法旋转"表盘"或"针"给出一个角度值?
有人建议我使用css:转换来做这个伎俩,但我仍然很难知道如何将css应用于剧情剧本。
简短的代码会很棒。 提前谢谢。
答案 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)
然后我们可以简单地将输入映射到它应该在仪表上的预期角度,并从那里计算x
和y
。对于我在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'