seVenVo1d
seVenVo1d

Reputation: 416

Scaling Y and X axis python graph

I have set of data and I made a graph by using them. The problem is the data does not look like scaled properly since y axis ranges from 0 to 30000 while x axis from -2 to 30. How can I solve this problem ? Thanks

Here is my code,

import numpy as np
import matplotlib.pyplot as plt

voltage365nm = [-1.877,-2.0,-1.5,-1.0,0.0,5.0,10.0,20.0,30.0] 
voltage405nm = [-1.437,-2.0,-1.5,-1.0,0.0,5.0,10.0,20.0,30.0] 
voltage546nm = [-0.768,-2.0,-1.5,-1.0,0.0,5.0,10.0,20.0,30.0] 

current365nm = [0.0,5.6,151.1,428,1164,5760,9870,1626,20700] 
current405nm = [0.0,-8.2,-2.6,70.2,278,1954,2460,3970,5021] 
current546nm = [0.0,-6.5,-6.1,-5.4,248,1435,2240,3250,3750] plt.plot(voltage365nm,current405nm,"r--",marker="s",label="$\lambda$=365 nm")
plt.plot(voltage405nm,current405nm,"b-.",marker="o",label="$\lambda$=405nm")
plt.plot(voltage546nm,current546nm,"g-",marker="^",label="$\lambda$=546nm")
plt.legend(loc='best')
plt.xlabel("Voltage (V)")
plt.ylabel("Current (I x $10^{-13}A}$)")
plt.title("Current vs Voltage")
plt.grid(b=True, which='major', color='g', linestyle='--')
plt.grid(b=True, which='minor', color='r', linestyle='--', alpha=0.2)
plt.show()                  

Upvotes: 1

Views: 22760

Answers (3)

Sheldore
Sheldore

Reputation: 39052

I would additionally put the lower values in an inset as a zoom in

# your existing code before plt.show()

left, bottom, width, height = [0.32, 0.55, 0.4, 0.3]
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(voltage365nm,current365nm,"r--",marker="s",label="$\lambda$=365 nm")
ax2.plot(voltage405nm,current405nm,"b-.",marker="o",label="$\lambda$=405nm")
ax2.plot(voltage546nm,current546nm,"g-",marker="^",label="$\lambda$=546nm")
ax2.set_xlim(-2.1, 1)
ax2.set_ylim(-100, 1500)
plt.grid(b=True, which='major', color='g', linestyle='--')
plt.show()

enter image description here

Upvotes: 1

Vladimir Shteyn
Vladimir Shteyn

Reputation: 116

I ran your code, and got the following chart:

enter image description here

Is your concern that the data points along the lower end of your y axis are "scrunched up"? If that's the case, perhaps plotting on the log axis might help. Use the set_yscale('log') method like so:

ax = plt.gca()
ax.set_yscale('log')

With that, I get the following chart:

enter image description here

The issue with this of course is that some of the y-axis values are negative, and thus can't be directly plotted on a log scale. The complete solution would involve adding a constant to all currents such that they're positive.

PS -- I think there's a bug in one of your plt.plot commands:

plt.plot(voltage365nm,current405nm,"r--",marker="s",label="$\lambda$=365 nm")

should be

plt.plot(voltage365nm, current365nm,"r--",marker="s",label="$\lambda$=365 nm")

Upvotes: 1

D Malan
D Malan

Reputation: 11414

You could use plt.xlim([-10,0]) and plt.ylim([-10,0]) to specify the minimum and maximum values of your axes.

Upvotes: 1

Related Questions