简体   繁体   中英

Plot specific values on y axis instead of increasing scale from dataframe

When plotting 2 columns from a dataframe into a line plot, is it possible to, instead of a consistently increasing scale, have fixed values on your y axis (and keep the distances between the numbers on the axis constant)? For example, instead of 0, 100, 200, 300, ... to have 0, 21, 53, 124, 287, depending on the values from your dataset? So basically to have on the axis all your possible values fixed instead of an increasing scale?

Yes, you can use: ax.set_yticks()

Example:

df = pd.DataFrame([[13, 1], [14, 1.5], [15, 1.8], [16, 2], [17, 2], [18, 3 ], [19, 3.6]], columns = ['A','B'])
fig, ax = plt.subplots()

x = df['A']
y = df['B']
ax.plot(x, y, 'g-')
ax.set_yticks(y)
plt.show()

在此处输入图片说明 Or if the values are very distant each other, you can use ax.set_yscale('log') . Example:

df = pd.DataFrame([[13, 1], [14, 1.5], [15, 1.8], [16, 2], [17, 2], [18, 3 ], [19, 3.6], [20, 300]], columns = ['A','B'])
fig, ax = plt.subplots()

x = df['A']
y = df['B']

ax.plot(x, y, 'g-')
ax.set_yscale('log', basex=2)
ax.yaxis.set_ticks(y)
ax.yaxis.set_ticklabels(y)
plt.show()

在此处输入图片说明

What you need to do is:

  1. get all distinct y values and sort them

  2. set their y position on the plot according to their place on the ordered list

  3. set the y labels according to distinct ordered values

The code below would do

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame([[13, 1], [14, 1.8], [16, 2], [15, 1.5], [17, 2], [18, 3 ], 
                   [19, 200],[20, 3.6], ], columns = ['A','B'])

x = df['A']
y = df['B']

y_keys = np.sort(y.unique())
y_values = range(len(y_keys))
y_dict = dict(zip(y_keys,y_values))

fig, ax = plt.subplots()

ax.plot(x,[y_dict[k] for k in y],'o-')

ax.set_yticks(y_values)
ax.set_yticklabels(y_keys)

y距离固定,但值不同

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM