簡體   English   中英

如何在matplotlib中將浮點值設置為科學計數法?

[英]How to set float values as scientific notation in matplotlib?

我已經seaborn了以下浮動結果:

[7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.3e-05, 7.4e-05, 7.3e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.3e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.3e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05]

繪制一個禁用了科學記數法的圖形,如下所示:

從列表中繪制

結果函數:

def result(values, time):
    x = 0.000000000001
    max = 0.000000001
    min = 0.001
    y = [(1.0*i*(max/min) for i in values]
    return generate((y, time))

以及生成圖形的函數:

def generate(data_):
    data, time = data_
    img = StringIO.StringIO()
    sns.set_style("darkgrid")
    plt.plot(time, data)
    plt.savefig(img, format=format_)
    img.seek(0)
    x = base64.b64encode(img.getvalue())
    return x

以下資料告訴我, seaborn默認情況下以科學計數法設置值。 但是在這種情況下,我有浮動結果。

Seaborn在熱圖中顯示3位數字的科學計數法

防止海底箱圖中的科學計數法

如何防止數字在Python Matplotlib圖中更改為指數形式

標注海洋簇圖時如何避免科學計數法?

浮動結果重要嗎?

我對flask不熟悉,但我認為您的問題可能出在繪圖上,而不是其他問題。 讓我們剝離所有其他內容,僅保留劇情。 我將您的代碼簡化為:

import datetime
import matplotlib.pyplot as plt

import seaborn as sns
sns.set_style("darkgrid")

import numpy as np
%matplotlib inline

def generate(data_):
    data, time = data_
    plt.plot(time, data)

def result(values, time):
    x = 0.000000000001
    max = 0.000000001
    min = 0.001
    y = [ 1.0*i*(max/min) for i in values ]
    return generate((y, time))

values = [7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 
          7.4e-05, 7.4e-05, 7.3e-05, 7.4e-05, 7.3e-05, 7.4e-05, 
          7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 
          7.4e-05, 7.4e-05, 7.3e-05, 7.4e-05, 7.4e-05, 7.4e-05, 
          7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 
          7.4e-05, 7.4e-05, 7.3e-05, 7.4e-05, 7.4e-05, 7.4e-05, 
          7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 
          7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 
          7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 7.4e-05, 
          7.4e-05, 7.4e-05]

time = [datetime.time(17, 44, 41), datetime.time(17, 45, 41), 
        datetime.time(17, 46, 41), datetime.time(17, 47, 41), 
        datetime.time(17, 48, 41), datetime.time(17, 49, 41), 
        datetime.time(17, 50, 41), datetime.time(17, 51, 41), 
        datetime.time(17, 52, 41), datetime.time(17, 53, 41), 
        datetime.time(17, 54, 41), datetime.time(17, 55, 41), 
        datetime.time(17, 56, 41), datetime.time(17, 57, 41), 
        datetime.time(17, 58, 41), datetime.time(17, 59, 41), 
        datetime.time(18, 0, 41), datetime.time(18, 1, 41), 
        datetime.time(18, 2, 41), datetime.time(18, 3, 41), 
        datetime.time(18, 4, 41), datetime.time(18, 5, 41), 
        datetime.time(18, 6, 41), datetime.time(18, 7, 41), 
        datetime.time(18, 8, 41), datetime.time(18, 9, 41), 
        datetime.time(18, 10, 41), datetime.time(18, 11, 41), 
        datetime.time(18, 12, 41), datetime.time(18, 13, 41), 
        datetime.time(18, 14, 41), datetime.time(18, 15, 41), 
        datetime.time(18, 16, 41), datetime.time(18, 17, 41), 
        datetime.time(18, 18, 54), datetime.time(18, 19, 55), 
        datetime.time(18, 20, 57), datetime.time(18, 21, 57), 
        datetime.time(18, 23, 3), datetime.time(18, 24, 27), 
        datetime.time(18, 25, 27), datetime.time(18, 26, 27), 
        datetime.time(18, 27, 27), datetime.time(18, 28, 27), 
        datetime.time(18, 29, 27), datetime.time(18, 30, 38), 
        datetime.time(18, 32, 4), datetime.time(18, 33, 12), 
        datetime.time(18, 34, 54), datetime.time(18, 35, 54), 
        datetime.time(18, 37, 34), datetime.time(18, 38, 34), 
        datetime.time(18, 40, 28), datetime.time(18, 41, 28), 
        datetime.time(18, 42, 28), datetime.time(18, 43, 28)]

result(values,time)

它以科學的表示法給了我結果:

默認為科學計數法

嘗試使用此代碼,看看是否做出科學計數。 如果沒有,我敢打賭,您需要將matplotlibseaborn更新到最新版本。 如果是這樣,那么至少您知道其他問題正在使您的標簽更加混亂。

使用matplotlib.ticker.FormatStrFormatter解決了該問題

import matplotlib.ticker as mtick

def generate(data_):
    data, time = data_
    img = StringIO.StringIO()
    sns.set_style("darkgrid")
    plt.plot(time, data)
    plt.gca().yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1E')) #this line solves the problem
    plt.savefig(img, format=format_)
    img.seek(0)
    x = base64.b64encode(img.getvalue())
    return x

使用其他時間值,我得到了該圖,並以科學計數法表示了yaxis。

在此處輸入圖片說明

請參閱此處的文檔

matplotlib.ticker.FormatStrFormatter(fmt)類

 Bases: matplotlib.ticker.Formatter Use an old-style ('%' operator) format string to format the tick 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM