如何用 100 万个点散点图
How to scatter plot with 1 million points
我正在尝试制作一个程序,该程序使用 csv 文件中的给定点绘制图形,该文件每行包含 4 个字符串(点数、x 位置、y 位置、颜色),但是时间takes 高得离谱,所以我正在寻找让它更快的想法。
from matplotlib import pyplot as plt
from matplotlib import style
import csv
style.use('ggplot')
s = 0.5
with open('total.csv') as f:
f_reader = csv.reader(f, delimiter=',')
for row in f_reader:
plt.scatter(str(row[1]), str(row[2]), color=str(row[3]), s=s)
plt.savefig("graph.png", dpi=1000)
第一步是调用 scatter
一次而不是对每个点都调用一次,不添加对 numpy 和 pandas 的依赖,它看起来像:
from matplotlib import pyplot as plt
from matplotlib import style
import csv
style.use("ggplot")
s = 0.5
x = []
y = []
c = []
with open("total.csv") as f:
f_reader = csv.reader(f, delimiter=",")
for row in f_reader:
x.append(row[1])
y.append(row[2])
c.append(row[3])
plt.scatter(x, y, color=c, s=s)
plt.savefig("graph.png", dpi=1000)
然后也许可以尝试 pandas.read_csv
,它会给你一个 pandas 数据框,让你无需 for
循环即可访问 CSV 的列,这可能会更快。
每次尝试变体时,测量它花费的时间(可能在较小的文件上)以了解哪些有帮助,哪些没有帮助,换句话说,不要盲目地提高性能。
使用 pandas 看起来像:
from matplotlib import pyplot as plt
from matplotlib import style
import pandas as pd
style.use("ggplot")
total = pd.read_csv("total.csv")
plt.scatter(total.x, total.y, color=total.color, s=0.5)
plt.savefig("graph.png", dpi=1000)
如果您想了解更多有关 pandas 性能良好实践的信息,我喜欢 No more sad pandas 演讲,请看一看。
我正在尝试制作一个程序,该程序使用 csv 文件中的给定点绘制图形,该文件每行包含 4 个字符串(点数、x 位置、y 位置、颜色),但是时间takes 高得离谱,所以我正在寻找让它更快的想法。
from matplotlib import pyplot as plt
from matplotlib import style
import csv
style.use('ggplot')
s = 0.5
with open('total.csv') as f:
f_reader = csv.reader(f, delimiter=',')
for row in f_reader:
plt.scatter(str(row[1]), str(row[2]), color=str(row[3]), s=s)
plt.savefig("graph.png", dpi=1000)
第一步是调用 scatter
一次而不是对每个点都调用一次,不添加对 numpy 和 pandas 的依赖,它看起来像:
from matplotlib import pyplot as plt
from matplotlib import style
import csv
style.use("ggplot")
s = 0.5
x = []
y = []
c = []
with open("total.csv") as f:
f_reader = csv.reader(f, delimiter=",")
for row in f_reader:
x.append(row[1])
y.append(row[2])
c.append(row[3])
plt.scatter(x, y, color=c, s=s)
plt.savefig("graph.png", dpi=1000)
然后也许可以尝试 pandas.read_csv
,它会给你一个 pandas 数据框,让你无需 for
循环即可访问 CSV 的列,这可能会更快。
每次尝试变体时,测量它花费的时间(可能在较小的文件上)以了解哪些有帮助,哪些没有帮助,换句话说,不要盲目地提高性能。
使用 pandas 看起来像:
from matplotlib import pyplot as plt
from matplotlib import style
import pandas as pd
style.use("ggplot")
total = pd.read_csv("total.csv")
plt.scatter(total.x, total.y, color=total.color, s=0.5)
plt.savefig("graph.png", dpi=1000)
如果您想了解更多有关 pandas 性能良好实践的信息,我喜欢 No more sad pandas 演讲,请看一看。