我正在尝试使用R / Shiny中的plotly创建一个仪表图表,并且很难确定如何根据值确定针尖的(x,y)坐标。
我的仪表最小值= 18792,最大值= 29472,中点为24132.我使用以下代码计算(x,y)坐标:
extension String {
var emojilessStringWithSubstitution: String {
let emojiPatterns = [UnicodeScalar(0x1F600)...UnicodeScalar(0x1F64F),
UnicodeScalar(0x1F300)...UnicodeScalar(0x1F5FF),
UnicodeScalar(0x1F680)...UnicodeScalar(0x1F6FF),
UnicodeScalar(0x2600)...UnicodeScalar(0x26FF),
UnicodeScalar(0x2700)...UnicodeScalar(0x27BF),
UnicodeScalar(0xFE00)...UnicodeScalar(0xFE0F)]
return self.unicodeScalars
.map { ucScalar in
emojiPatterns.contains{ $0 ~= ucScalar } ? UnicodeScalar(32) : ucScalar }
.reduce("") { $0 + String($1) }
}
}
我假设圆的原点是(0.5,0.5)。我需要针的长度为~0.2(所以r = 0.2)。
正如预期的那样,无论何时达到最小值(18792),针位置为(0.3,0.5),并且在屏幕上查看它看起来是正常的:
但是,当值达到中点(24132)时,虽然(x,y)按预期出现(0.5,0.7),但针似乎没有上一个例子那样长:
我使用的代码如下。您可以通过注释掉相应的县值来在min和mid之间切换:
x1 = round(0.5 + (0.2 * cos(deg2rad(180-degs))), digits = 3)
y1 = round(0.5 + (0.2* sin(deg2rad(180-degs))), digits = 3)
必须有一些我完全失踪的东西。非常感谢任何帮助!
答案 0 :(得分:1)
我知道这是事后的一点点,但我刚刚遇到了完全相同的问题,但使用的是Python API。我不需要我的语言绝对准确,而且“足够接近”会做。我通过将y轴上的半径值加倍来解决问题。
这产生了可接受的结果,我认为这是因为将x和y轴都视为0到1.0之间的值。我使用矩形显示面板,这意味着x = 0.1和y = 0.1是不同的度量。希望这有助于其他人!
答案 1 :(得分:0)
我想将甜甜圈图的标签放在其中,但我尝试了一种解决方案,但它不在我想要的位置。这是我们的代码:
p1 <- plot_ly(tab2, labels = ~c("Domicile-Travail","Domicile-ecole","Courses-achats","Utilisation professionnelle","Promenade-loisirs","Autre"), values = ~prop, type = 'pie',textposition = 'middle right',
textinfo = 'percent',subtitle="B", hole= "0.5",domain = list(x = c(0, 0.45), y = c(0, 1)),insidetextfont = list(color = '#FFFFFF'),
hoverinfo = 'text')
p2 <- plot_ly(tab3, labels= ~c("Domicile-Travail","Domicile-ecole","Courses-achats","Utilisation professionnelle","Promenade-loisirs","Autre"), values = ~prop, type = 'pie', textposition = 'middle left',
textinfo = 'percent',hole= "0.5", domain = list(x = c(0.55,1), y = c(0, 1)), insidetextfont = list(color = '#FFFFFF'),
hoverinfo = 'text', annotations=list(text="B",x=0,y=0,label=2013))
subplot(p1,p2)%>%
layout(title = "Nombre d'accidents par type de trajet ",
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
答案 2 :(得分:0)
**对于 Python - 我有同样的问题,但只使用 Python
就我而言,这是因为半圆实际上并不是半圆。如果您使用
在图表后面绘制网格fig.update_layout(xaxis={'showgrid': True, 'showticklabels':True})
您可能会发现沿 x 轴和 y 轴的半圆半径不相同。为了解决这个问题,我找到了另一个参数并添加了另一行:
fig.update_layout(autosize=False)
再次绘制网格以进行检查,但对我而言,这使我的仪表沿 x 和 y 轴具有相同的半径。然后,我的箭头/指示器始终保持相同的长度并准确指向。另一个潜在的技巧,如果你想让你的箭头不一直延伸到外边缘,你可以使用这个参数:
standoff=30 #try numbers to see what works
将此参数放在箭头注释中并使用一些值
@TWCars:您可以在图表的任何位置手动添加文本,如下所示:
fig.add_annotation(x=-.5, y=.5, text="<b>Text</b>", showarrow=False)
其中 x 和 y 值是文本将在网格上显示的位置(b 标记为粗体,可以删除)。这有点笨拙,但如果您的图形是静态的并且始终需要在一个位置显示文本,这可能是一个很好的解决方案。