ここではplt.axis()
、xminとxmaxの値を設定するために使用します(あなたのplt.xlim
呼び出しと同様)。しかし、私は範囲と間隔に基づいて構築された変数「バッファ」を使用します。軸の範囲は、最小値と最大値を使用して導き出されます。対数目盛は0または負の値をプロットしないため、関数呼び出しxmin
内で引数を1に設定します。.axis()
interval = 10
plot_range_buffer = (data.column.max() - data.column.min() / interval
plt.axis(
xmin=1, # to keep scale if minimum is 0 or close to 0
#xmin = data.column.min()-plot_range_buffer # subtracts interval buffer from min value
xmax=data.column.max()+plot_range_buffer # adds the interval buffer to max value
)
必要に応じて、y軸でも同じことができます。プロットの1つの側面を制御するためのコードはたくさんありますが、matplotlib.pyplotが厄介な場合は、ユーザー関数内で使用するのが好きです。
試行錯誤のための2つのテンプレートユーザールーチンを次に示します。私は最初のものをテストしました、そしてそれはうまくいきました。代替オプションとして2つ目を作成しましたが、テストしませんでした...エラーが発生した場合はお知らせください。
ユーザー機能#1:機能内の完全な制御
def plotcolumn(some_row_entry):
"""Selects data for some row entry
Creates a scatter plot from two column variables
Allows for user control over buffers through manipulation
of interval that is relative to axis max,min range"""
# numpy fancy selector for input argument
data = data[data.some_row_entry == some_row_entry]
# establish plot
data.plot.scatter(
'first_column',
'second_column',
logx=True, # turn log xaxis on/off
#logy=True # turn log yaxis on/off
)
# axis range controls
x_interval = 10
y_interval = 10
# x axis (ie x-axis variable)
x_buffer = (data.first_column.max() - data.first_column.min()) / x_interval
# y axis (ie y-axis variable)
y_buffer = (data.second_column.max() - data.second_column.min()) / y_interval
plt.axis(
xmin=1, # use for xaxis lower buffer if logx and close to 0
xmax=data.first_column.max()+x_buffer, # sets xaxis upper buffer
#xmin=data.first_column.min()-x_buffer, # sets xaxis lower buffer if not logx close to 0
#ymin= 1, # use for yaxis lower buffer if logy and close to 0
ymax= data.second_column.max()+y_buffer, # sets yaxis upper buffer
ymin= data.second_column.min()-y_buffer # sets yaxis lower if not logy close to 0
)
ユーザー関数#2: 1つの軸と間隔の引数を渡す
def plotcolumn_log_cond(some_row_entry, logaxis = 'x', interval = 10):
"""Selects data for some row entry
Creates a scatter plot from two column variables.
Arguments:
Set axis to be logged (x or y as string)
Pass interval value (as number)
"""
# numpy fancy selector for input argument
data = data[data.some_row_entry == some_row_entry]
# establish plot
data.plot.scatter(
'first_column',
'second_column',
logx=True)
# LOG XAXIS
if logaxis = 'x':
# establish plot
data.plot.scatter(
'first_column',
'second_column',
logx=True
)
# axis range controls
x_interval = interval
# x axis (ie x-axis variable)
x_buffer = (data.first_column.max() - data.first_column.min()) / x_interval
plt.axis(
xmin=1, # use for xaxis lower buffer if logx and close to 0
xmax=data.first_column.max()+x_buffer, # sets xaxis upper buffer
#xmin=data.first_column.min()-x_buffer, # sets xaxis lower buffer if not logx close to 0
)
# LOG YAXIS
if logaxis = 'y':
# establish plot
data.plot.scatter(
'first_column',
'second_column',
logy=True
)
# axis range controls
y_interval = interval
# x axis (ie x-axis variable)
y_buffer = (data.second_column.max() - data.second_column.min()) / y_interval
plt.axis(
ymin=1, # use for yaxis lower buffer if logy and close to 0
ymax=data.second_column.max()+y_buffer, # sets yaxis upper buffer
#ymin=data.second_column.min()-y_buffer, # sets yaxis lower buffer if not logy close to 0
)
# NOT X OR Y PASSED
if (logaxis != 'x') & (logaxis != 'y'):
# establish plot
data.plot.scatter(
'first_column',
'second_column')