python中范围的图形分散';s matplotlib

python中范围的图形分散';s matplotlib,python,matplotlib,Python,Matplotlib,到目前为止,我有这个图表,有点难看。每种类型的标记都是一种算法的精度 这有两个问题: 我希望在内容和轴之间留有空间,但只显示y[0,1]的刻度,并且让x轴不显示负值(没有负时间) 我希望将x值显示为其日志转换,但保留刻度上的原始值,以便您可以看到实际值 对于#1,正如您在下面看到的,我尝试过使用xticks,但没有太大成功 对于#2,很容易将数据放入np.log10()中,但随后轴标记也会进行日志转换。我觉得应该有一个简单的方法来显示日志(这似乎是一个很正常的事情) 以下是我目前的代码: im

到目前为止,我有这个图表,有点难看。每种类型的标记都是一种算法的精度

这有两个问题:

  • 我希望在内容和轴之间留有空间,但只显示y[0,1]的刻度,并且让x轴不显示负值(没有负时间)
  • 我希望将x值显示为其日志转换,但保留刻度上的原始值,以便您可以看到实际值
  • 对于#1,正如您在下面看到的,我尝试过使用xticks,但没有太大成功

    对于#2,很容易将数据放入
    np.log10()
    中,但随后轴标记也会进行日志转换。我觉得应该有一个简单的方法来显示日志(这似乎是一个很正常的事情)

    以下是我目前的代码:

    import matplotlib as mpl
    mpl.use('Agg')
    import matplotlib.pyplot as plt
    import numpy as np
    import random
    
    # create fake data
    data = {}
    data['A'] = []
    data['B'] = []
    data['C'] = []
    
    n = 5
    data['A'] = zip(np.random.uniform(0, 10000, size=n), np.random.uniform(0, 0.6, size=n))
    data['B'] = zip(np.random.uniform(0, 200, size=n), np.random.uniform(0, 0.6, size=n))
    data['C'] = zip(np.random.uniform(0, 5000, size=n), np.random.uniform(0, 0.6, size=n))
    
    # make graph
    markers = ['+', '*', 'x']
    colors = ['b', 'r', 'g']
    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    plots = []
    labels = []
    
    # extract data
    i = 0
    for algorithm in ['A', 'B', 'C']:
        results = data[algorithm]
        testing = np.array([float(x[1]) for x in results if x > 0.0])
        ts = np.array([int(x[0]) for x in results if x > 0.0])
        color = colors[i]
        marker = markers[i]
        plot = ax1.scatter(ts, testing, color=color, marker=marker, s=10)
        plots.append(plot)
        labels.append(algorithm)
        i += 1
    
    # set axis and title
    ax1.legend(plots, labels, loc='lower right')
    ax1.set_xlabel("Time (sec)")
    ax1.set_ylabel("Testing Accuracy")
    ax1.set_title("Time versus testing accuracy")
    
    # set axis limits
    xticks, xticklabels = plt.xticks()
    xmin = (3*xticks[0] - xticks[1])/2.
    xmax = (3*xticks[-1] - xticks[-2])/2.
    plt.xlim(xmin, xmax)
    plt.xticks(xticks)
    
    plt.ylim(0.0, 1.0)
    
    # save to disk
    plt.savefig("scatter.eps")
    

    你为什么不这么做

    ax1.set_ylim( -.1, 1.1 )
    ax1.set_yticks( np.linspace(0, 1, 10) )
    
    ax1.set_xscale('log')