1 回答

TA貢獻1796條經(jīng)驗 獲得超10個贊
首先,對您的帖子進行一些改進:您缺少導(dǎo)入語句
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import ticker
import seaborn as sns
線路
df = pd.DataFrame(data_file)
不是必需的,因為data_file已經(jīng)是一個 DataFrame 了。線條
points = ['o', 'v', '^', '<', '>', '8', 's', 'p', 'H', 'D', 'd', 'P', 'X']
mult = len(df['name']) // len(points) + (len(df['name']) % len(points) > 0)
markers = {key:value for (key, value)
in zip(df['name'], points * mult)}
不要points像您期望的那樣循環(huán),也許可以按照此處的itertools建議使用。另外,設(shè)置 yticks 像
ax.yaxis.set_major_locator(ticker.MultipleLocator(100))
如果您的數(shù)據(jù)范圍為 0 到 2000 萬,則每 100 可能太多,請考慮將 100 替換為 1000000。
我能夠重現(xiàn)你的第一個問題。使用df.dtypes我發(fā)現(xiàn)該列counter存儲為 type object。添加行
df['counter']=df['counter'].astype(int)
為我解決了你的第一個問題。不過,我無法重現(xiàn)您的第二個問題。對于我來說,結(jié)果圖是這樣的:
您是否嘗試將所有軟件包更新到最新版本?
編輯:作為您評論的后續(xù)內(nèi)容,您還可以通過替換 1 來調(diào)整圖中的 xticks 數(shù)量
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
更高的數(shù)字,比如 10。結(jié)合我的所有建議并刪除看似不必要的函數(shù)定義,我的代碼版本如下所示:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import ticker
import seaborn as sns
import itertools
fig = plt.figure()
ax = fig.add_subplot()
df = pd.read_csv(
'data.csv',
header = None,
error_bad_lines = False,
delimiter = "|",
index_col = False,
dtype = 'unicode')
df.rename(columns={0: 'name',
1: 'date',
2: 'name3',
3: 'name4',
4: 'name5',
5: 'ID',
6: 'counter'}, inplace=True)
df.date = pd.to_datetime(df['date'], unit='s')
df['counter'] = df['counter'].astype(int)
points = ['o', 'v', '^', '<', '>', '8', 's', 'p', 'H', 'D', 'd', 'P', 'X']
markers = itertools.cycle(points)
markers = list(itertools.islice(markers, len(df['name'].unique())))
sc = sns.scatterplot(
data = df,
x = 'date',
y = 'counter',
hue = 'name',
style = 'name',
markers = markers,
s = 50)
ax.set_title("TEST", size = 12, zorder=0)
ax.legend(
title = "Names",
loc = 'center left',
shadow = True,
edgecolor = 'grey',
handletextpad = 0.1,
bbox_to_anchor = (1, 0.5))
ax.xaxis.set_major_locator(ticker.MultipleLocator(10))
ax.yaxis.set_major_locator(ticker.MultipleLocator(1000000))
ax.minorticks_off()
ax.set_xlabel("Dates", fontsize = 12, labelpad = 7)
ax.set_ylabel("Counter", fontsize = 12)
ax.grid(axis='y', color='0.95')
fig.autofmt_xdate(rotation = 30)
plt.gcf().subplots_adjust(bottom=0.15)
plt.show()
添加回答
舉報