【发布时间】:2021-03-07 13:02:41
【问题描述】:
我从一个名为 t_array_hr 的 txt 文件中读出了一个数组
['4.155890E+11', '4.155893E+11', '4.155896E+11', ...,'2.723167E+14', '2.723167E+14', '2.723167E+14']
我离开 ... 的原因是因为整个数组有数千个值。 我在下图中使用这个数组作为 x 轴。我的问题是 x 轴值在科学计数法中的小数位太多。我想将它们保留为科学计数法,但将小数位减少并四舍五入到 2(4.15589e11 到 4.16e11)。
我的代码如下
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import ticker
from matplotlib.ticker import MaxNLocator
stellarModel = open('filepath', 'r')
i = 0
tstep = 0
dtype = object
dataframe_hr = pd.read_csv(stellarModel,delim_whitespace=True,header=None,low_memory=False,names=np.arange(14),dtype={'0':np.int16,'1':np.int16,'2':np.float16,'3':np.float16,'4':np.float16,'5':np.float16,'6':np.float16,'7':np.float16,'8':np.float16,'9':np.float16,'10':np.float16,'11':np.float16,'12':np.float16,'13':np.float16})
nrows = np.shape(dataframe_hr)[0]
T_array_hr = []
L_array_hr = []
t_array_hr = []
r_array_hr = []
M_array_hr=[]
Mdot_hr=[]
vinf_hr=[]
for i in range(nrows):
if i%55 == 0:
T_array_hr.append(dataframe_hr[7][i])
L_array_hr.append(dataframe_hr[6][i])
t_array_hr.append(dataframe_hr[1][i])
r_array_hr.append(dataframe_hr[4][i])
Mdot_hr.append(dataframe_hr[9][i])
vinf_hr.append(dataframe_hr[11][i])
M_array_hr.append(dataframe_hr[8][i])
fig = plt.figure(1, figsize = (10,6))
axes = fig.add_axes([0.2, 0.1, 0.8, 1.0]) # left, bottom, width, height
axes.plot(t_array_hr, Mdot_hr)
axes.set_xlabel('Time')
axes.set_ylabel('Mass Loss')
axes.set_title('Rate of Mass Loss over Time')
axes.invert_yaxis()
axes.xaxis.set_major_locator(MaxNLocator(6))
有人知道如何在不影响科学计数法的情况下减少小数位吗?
【问题讨论】:
-
你的数组有字符串。您需要将其转换为浮点数(或其他数字数据类型)。例如:
t_array_hr = [float(n) for n in t_array_hr]。或其他名称,如果您想保留原始字符串列表。 -
顺便说一句,这就是它从 e11 跳转到 e14 然后停留在那里的原因。它准确地显示了字符串的字符。
标签: python matplotlib