如何在三元绘图中添加数据标签?
How to add data labels in ternary plotly diagram?
我正在按照 plotly documentation 中的示例进行操作。我获得了带有数据点的漂亮等高线图:
现在我想通过向数据点或等值线添加标签来使其更具可读性。目前,我可以通过将鼠标悬停在数据点上来了解数据点的坐标和值,但我更希望这些数字被永久注释,这样我就可以将其打印在科学文章中。
我会用 fig.add_trace(go.Scatterternary()
突出显示兴趣点并调整 text amd marker
属性以使其看起来不错。这是一个示例,我在左下角突出显示了一个点:
情节 2
为什么不 fig.add_annotatoins()
或者别的什么?
完美的可以说是能够为任何给定的标记设置 hoverinfo 以一直显示。但据我所知,目前这是不可能的。您也可以使用 fig.add_annotations()
,但据我所知,您将不得不依赖 x, y
坐标,只有 xref
和 yref
都设置为纸张。
不过,fig.add_trace(go.Scatterternary()
的一个好处是您还可以在图例中包含这些数据:
fig.update_layout(showlegend = True)
fig.for_each_trace(lambda t: t.update(showlegend = False))
fig.data[-1].showlegend = True
情节 2
完整代码:
import plotly.figure_factory as ff
import numpy as np
import plotly.graph_objects as go
Al, Cu = np.mgrid[0:1:7j, 0:1:7j]
Al, Cu = Al.ravel(), Cu.ravel()
mask = Al + Cu <= 1
Al, Cu = Al[mask], Cu[mask]
Y = 1 - Al - Cu
enthalpy = (Al - 0.5) * (Cu - 0.5) * (Y - 1)**2
fig = ff.create_ternary_contour(np.array([Al, Y, Cu]), enthalpy,
pole_labels=['Al', 'Y', 'Cu'],
ncontours=20,
coloring='lines',
showmarkers=True)
fig.add_trace(go.Scatterternary(
a = [2],
b = [8],
c = [2],
mode = "markers+text",
text = ["A"],
texttemplate = "%{text}<br>(%{a:.2f}, %{b:.2f}, %{c:.2f})",
textposition = "bottom center",
marker_symbol = 'circle-open',
marker_color = 'green',
marker_line_width = 3,
marker_size = 12,
textfont = {'family': "Times", 'size': [14, 14, 14],
# 'color': ["IndianRed", "MediumPurple", "DarkOrange"]
}
))
fig.update_layout(showlegend = True)
fig.for_each_trace(lambda t: t.update(showlegend = False))
fig.data[-1].showlegend = True
fig.show()
我正在按照 plotly documentation 中的示例进行操作。我获得了带有数据点的漂亮等高线图:
现在我想通过向数据点或等值线添加标签来使其更具可读性。目前,我可以通过将鼠标悬停在数据点上来了解数据点的坐标和值,但我更希望这些数字被永久注释,这样我就可以将其打印在科学文章中。
我会用 fig.add_trace(go.Scatterternary()
突出显示兴趣点并调整 text amd marker
属性以使其看起来不错。这是一个示例,我在左下角突出显示了一个点:
情节 2
为什么不 fig.add_annotatoins()
或者别的什么?
完美的可以说是能够为任何给定的标记设置 hoverinfo 以一直显示。但据我所知,目前这是不可能的。您也可以使用 fig.add_annotations()
,但据我所知,您将不得不依赖 x, y
坐标,只有 xref
和 yref
都设置为纸张。
不过,fig.add_trace(go.Scatterternary()
的一个好处是您还可以在图例中包含这些数据:
fig.update_layout(showlegend = True)
fig.for_each_trace(lambda t: t.update(showlegend = False))
fig.data[-1].showlegend = True
情节 2
完整代码:
import plotly.figure_factory as ff
import numpy as np
import plotly.graph_objects as go
Al, Cu = np.mgrid[0:1:7j, 0:1:7j]
Al, Cu = Al.ravel(), Cu.ravel()
mask = Al + Cu <= 1
Al, Cu = Al[mask], Cu[mask]
Y = 1 - Al - Cu
enthalpy = (Al - 0.5) * (Cu - 0.5) * (Y - 1)**2
fig = ff.create_ternary_contour(np.array([Al, Y, Cu]), enthalpy,
pole_labels=['Al', 'Y', 'Cu'],
ncontours=20,
coloring='lines',
showmarkers=True)
fig.add_trace(go.Scatterternary(
a = [2],
b = [8],
c = [2],
mode = "markers+text",
text = ["A"],
texttemplate = "%{text}<br>(%{a:.2f}, %{b:.2f}, %{c:.2f})",
textposition = "bottom center",
marker_symbol = 'circle-open',
marker_color = 'green',
marker_line_width = 3,
marker_size = 12,
textfont = {'family': "Times", 'size': [14, 14, 14],
# 'color': ["IndianRed", "MediumPurple", "DarkOrange"]
}
))
fig.update_layout(showlegend = True)
fig.for_each_trace(lambda t: t.update(showlegend = False))
fig.data[-1].showlegend = True
fig.show()