【问题标题】:python: scatter plot logarithmic scalepython:散点图对数刻度
【发布时间】:2013-09-17 09:28:04
【问题描述】:

在我的代码中,我取两个数据系列的对数并绘制它们。我想通过将 x 轴的每个刻度值提高到 e 的幂(自然对数的反对数)来更改它。

换句话说。我想绘制两个系列的对数,但在水平上有 x 轴。

这是我正在使用的代码。

from pylab import scatter
import pylab
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame
import numpy as np

file_name = '/Users/joedanger/Desktop/Python/scatter_python.csv'

data = DataFrame(pd.read_csv(file_name))

y = np.log(data['o_value'], dtype='float64')
x = np.log(data['time_diff_day'], dtype='float64')

fig = plt.figure()
plt.scatter(x, y, c='blue', alpha=0.05, edgecolors='none')
fig.suptitle('test title', fontsize=20)
plt.xlabel('time_diff_day', fontsize=18)
plt.ylabel('o_value', fontsize=16)
plt.xticks([-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4])

plt.grid(True)
pylab.show()

【问题讨论】:

    标签: python matplotlib logarithm


    【解决方案1】:

    matplotlib为你记录日志:

    fig = plt.figure()
    ax = plt.gca()
    ax.scatter(data['o_value'] ,data['time_diff_day'] , c='blue', alpha=0.05, edgecolors='none')
    ax.set_yscale('log')
    ax.set_xscale('log')
    

    如果您使用所有相同大小和颜色的标记,则使用plot 会更快

    fig = plt.figure()
    ax = plt.gca()
    ax.plot(data['o_value'] ,data['time_diff_day'], 'o', c='blue', alpha=0.05, markeredgecolor='none')
    ax.set_yscale('log')
    ax.set_xscale('log')
    

    【讨论】:

    • @tcaswell 我在plt.scatter() 之后使用plt.yscale('log') 时遇到了问题,并且已经描述了问题in this question
    • ax.set_yscale('log') 是否使用 np.log 或 np.log1p 进行转换?
    【解决方案2】:

    接受的答案有点过时了。至少 pandas 0.25 原生支持对数轴:

    # logarithmic X
    df.plot.scatter(..., logx=True)
    # logarithmic Y
    df.plot.scatter(..., logy=True)
    # both
    df.plot.scatter(..., loglog=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-25
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多