三元图作为子图

时间:2018-10-12 12:03:43

标签: python matplotlib ternary

我想绘制多个三元图,并考虑使用matplotlib的子图进行此操作。 我只是得到空的“常规”图,而不是我想要的三元图。我发现

的用法
figure, ax = plt.subplots()
tax = ternary.TernaryAxesSubplot(ax=ax)

所以这似乎是可行的,但并不能真正找到如何使它工作的方法。有什么想法吗?

我正在使用的代码: 我正在使用for循环,因为数据具有名为tria1-a,tria2-a等的列,用于不同的三合会

import ternary
import matplotlib.pyplot as plt
import pandas as pd

#configure file to import. 
filename = 'somecsv.csv'
filelocation = 'location'
dfTriad = pd.read_csv(filelocation+filename)


# plot the data
scale = 33
figure, ax = plt.subplots()
tax = ternary.TernaryAxesSubplot(ax=ax, scale=scale)

figure.set_size_inches(10, 10)
tax.set_title("Scatter Plot", fontsize=20)
tax.boundary(linewidth=2.0)
tax.gridlines(multiple=1, color="blue")

tax.legend()
tax.ticks(axis='lbr', linewidth=1, multiple=5)
tax.clear_matplotlib_ticks()

#extract the xyz columns for the triads from the full dataset
for i in range(1,6) :
    key_x = 'tria'+ str(i) + '-a'
    key_y = 'tria' + str(i) + '-b'
    key_z = 'tria' + str(i) + '-c'

    #construct dataframe from the extracted xyz columns
    dfTriad_data = pd.DataFrame(dfTriad[key_x], columns=['X'])
    dfTriad_data['Y'] = dfTriad[key_y]
    dfTriad_data['Z'] = dfTriad[key_z]

    #create list of tuples from the constructed dataframe
    triad_data = [tuple(x) for x in dfTriad_data.to_records(index=False)]

    plt.subplot(2, 3, i)
    tax.scatter(triad_data, marker='D', color='green', label="")

tax.show()

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,可以通过先“进入”子图来解决,然后通过给plt.gca()作为关键字参数ax在其中创建三元图:

plt.subplot(2,2,4, frameon = False)
scale = 10
plt.gca().get_xaxis().set_visible(False)
plt.gca().get_yaxis().set_visible(False)
figure, tax = ternary.figure(ax = plt.gca(), scale = scale)
#now you can use ternary normally:
tax.line(scale * np.array((0.5,0.5,0.0)), scale*np.array((0.0, 0.5, 0.5)))
tax.boundary(linewidth=1.0)
#...