Plotly三元图子图绘制及多库图表整合技术问询
Plotly三元图子图绘制及多库图表整合技术问询
我现在在Plotly Express、Plotly_figure_factory这些工具的使用上完全摸不着头脑,尤其是不知道怎么用Plotly绘制三元图的子图。
最开始我尝试用Plotly Graph Objects来实现,参考三元散点图的写法并结合子图创建方法,拼出来的代码如下:
import plotly.graph_objects as go from plotly.subplots import make_subplots import plotly.graph_objects as go rawData = [ {'journalist':75,'developer':25,'designer':0,'label':'point 1'}, {'journalist':70,'developer':10,'designer':20,'label':'point 2'}, {'journalist':75,'developer':20,'designer':5,'label':'point 3'}, {'journalist':5,'developer':60,'designer':35,'label':'point 4'}, {'journalist':10,'developer':80,'designer':10,'label':'point 5'}, {'journalist':10,'developer':90,'designer':0,'label':'point 6'}, {'journalist':20,'developer':70,'designer':10,'label':'point 7'}, {'journalist':10,'developer':20,'designer':70,'label':'point 8'}, {'journalist':15,'developer':5,'designer':80,'label':'point 9'}, {'journalist':10,'developer':10,'designer':80,'label':'point 10'}, {'journalist':20,'developer':10,'designer':70,'label':'point 11'}, ]; def makeAxis(title, tickangle): return { 'title': {'text': title, 'font': { 'size': 20}}, 'tickangle': tickangle, 'tickfont': { 'size': 15 }, 'tickcolor': 'rgba(0,0,0,0)', 'ticklen': 5, 'showline': True, 'showgrid': True } fig = go.Figure(go.Scatterternary({ 'mode': 'markers', 'a': [i for i in map(lambda x: x['journalist'], rawData)], 'b': [i for i in map(lambda x: x['developer'], rawData)], 'c': [i for i in map(lambda x: x['designer'], rawData)], 'text': [i for i in map(lambda x: x['label'], rawData)], 'marker': { 'symbol': 100, 'color': '#DB7365', 'size': 14, 'line': { 'width': 2 } } })) fig.update_layout({ 'ternary': { 'sum': 100, 'aaxis': makeAxis('Journalist', 0), 'baxis': makeAxis('<br>Developer', 45), 'caxis': makeAxis('<br>Designer', -45) }, 'annotations': [{ 'showarrow': False, 'text': 'Simple Ternary Plot with Markers', 'x': 0.5, 'y': 1.3, 'font': { 'size': 15 } }] }) fig.show() my_ternary_plot = go.Scatterternary({ 'mode': 'markers', 'a': [i for i in map(lambda x: x['journalist'], rawData)], 'b': [i for i in map(lambda x: x['developer'], rawData)], 'c': [i for i in map(lambda x: x['designer'], rawData)], 'text': [i for i in map(lambda x: x['label'], rawData)], 'marker': { 'symbol': 100, 'color': '#DB7365', 'size': 14, 'line': { 'width': 2 } }}) figure = make_subplots(rows=1, cols=2) figure.add_trace(my_ternary_plot, row=1, col=1 ) figure.add_trace( my_ternary_plot, row=1, col=2 ) figure.update_layout(height=600, width=800, title_text="Side By Side Subplots") figure.show()
但运行这段代码后出现了以下错误:
ValueError: Trace type 'scatterternary' is not compatible with subplot type 'xy'
at grid position (1, 1)See the docstring for the specs argument to
plotly.subplots.make_subplotsfor more information on subplot types
除此之外,我也找不到任何关于如何用Plotly Express绘制的三元图来创建子图的参考,比如我有这样一段Plotly Express的三元图代码:
data_rand = pd.DataFrame(data=np.random.uniform(0,1,size=((20,4))), columns = ["a","b", "c", "d"]) data_rand["size"] = 35 import plotly.graph_objects as go import plotly.express as px plot_ter = px.scatter_ternary(data_rand, a="a", b = "b", c="c", color="d", size="size") fig.show()
我还希望最终的子图中不仅包含Plotly生成的图表,还要能整合进matplotlib的图表,但完全找不到实现方法。难道就没有类似将ax对象传入matplotlib图中那样简单的实现方式吗?
备注:内容来源于stack exchange,提问作者user37292
相关产品推荐
相关产品推荐

