【问题标题】:multiple scatter plots with matplotlib and strings on the x-axis.在 x 轴上带有 matplotlib 和字符串的多个散点图。
【发布时间】:2018-07-01 01:07:48
【问题描述】:

我正在尝试在一个图中制作三个散点图。我是这样试的。

首先进行导入。

import matplotlib.pyplot as plt 

定义变量并制作一个包含三个散点图的图形。

c_pop = [0.410, -0.094, -0.111, -0.106, -0.090, 0.070, -0.043, -0.181, 0.221]
c_labels = ['ll120', 'll123', 'll124', 'll27', 'll28', 'll30', 'll446, n12', 'll447, n86', 'll471']
pre_lo = [-0.493]
post_lo = [0.145]
lo_label = ['lo']

fig = plt.figure()
ax1 = fig.add_subplot(111)

ax1.scatter(c_labels, c_pop, color='black')
ax1.scatter(lo_label, pre_lo, color='green', label='pre-SNEP')
ax1.scatter(lo_label, post_lo, color='red', label='post-SNEP')

plt.show()

我得到的错误是:无法将字符串转换为浮点数:lo

它似乎试图将 lo_label 转换为其他东西。

如果我禁用第一个散点图并且只运行第二个和第三个,代码就会运行。当我只运行第一个散点图并禁用第二个第三个散点图时,它也会运行。

出了什么问题?是否可以在一张图中制作三个散点图,x 轴上有标签?

【问题讨论】:

    标签: python matplotlib scatter-plot


    【解决方案1】:

    Matplotlib 分类支持是 matplotlib 2.1 中一个相当新的功能。有一些问题仍在研究中。

    Matplotlib >= 2.1.1

    问题中的代码在 matplotlib 2.1.1 或更高版本中运行良好。

    import matplotlib.pyplot as plt
    import numpy as np 
    
    x1 = ["apple", "banana", "apple", "cherry"]
    x2 = ["cherry", "date"]
    
    y1 = [1,2,2,2]
    y2 = [3,4]
    
    
    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    
    ax1.scatter(x1, y1, color='black', label='Initial Fruits')
    ax1.scatter(x2, y2, color='green', label='Further Fruits')
    
    plt.legend()
    plt.show()
    

    Matplotlib

    虽然 matplotlib 2.1.0 原则上允许绘制类别,但无法向现有类别轴添加更多类别。因此,需要使用一种也适用于更低版本的解决方案,将值绘制为数值数据。

    import matplotlib.pyplot as plt
    import numpy as np 
    
    x1 = ["apple", "banana", "apple", "cherry"]
    x2 = ["cherry", "date"]
    
    y1 = [1,2,2,2]
    y2 = [3,4]
    
    c = ["black"]*len(x1) + ["green"]*len(x2)
    u, inv = np.unique(x1+x2, return_inverse=True)
    
    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    
    ax1.scatter(inv, y1+y2, c=c, )
    
    f = lambda c : plt.plot([],color=c, ls="", marker="o")[0]
    ax1.legend(handles = [f("black"), f("green")], 
               labels=['Initial Fruits', 'Further Fruits'])
    
    ax1.set_xticks(range(len(u)))
    ax1.set_xticklabels(u)
    
    plt.show()
    

    两种情况下的结果图:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2017-08-24
      • 2019-07-09
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多