我有一个数据文件data.txt
a \n5 b \n3 c 7\nRun Code Online (Sandbox Code Playgroud)\n我想加载并拥有
\n julia> loaded_data\n3\xc3\x973 Matrix{Any}:\n "" "a" ""\n 5 "b" ""\n 3 "c" 7\nRun Code Online (Sandbox Code Playgroud)\n但我不清楚如何做到这一点。试readdlm
julia> using DelimitedFiles\n\njulia> readdlm("data.txt")\n3\xc3\x973 Matrix{Any}:\n "a" "" ""\n 5 "b" ""\n 3 "c" 7\nRun Code Online (Sandbox Code Playgroud)\n不能正确地将第一列的第一个元素识别为空白,而是读取"a"为第一个元素(这当然是有道理的)。我认为最接近我想要的就是使用readlines
julia> readlines("data.txt")\n3-element Vector{String}:\n " a "\n "5 b "\n "3 c 7"\nRun Code Online (Sandbox Code Playgroud)\n但从这里我不知道如何继续。我可以抓取其中一行及其所有列split,但不确定这如何帮助我识别其他行中的空元素。
我有以下代码来生成具有共享图例的图
from matplotlib.legend_handler import HandlerLine2D, HandlerTuple
import matplotlib.pyplot as pt
fig = pt.figure(figsize = (12,4))
gd = fig.add_gridspec(1,2)
p1 = fig.add_subplot(gd[0])
p2 = fig.add_subplot(gd[1])
redLine, = p1.plot([1,2,3], [4,2,5], 'r-')
greenLine, = p1.plot([1,2,3], [8,9,1], 'g--')
redDot, = p2.plot([1,2,3], [4,2,5], 'ro')
greenDot, = p2.plot([1,2,3], [8,9,1], 'gs')
leg = p2.legend([(redLine, redDot), (greenLine, greenDot)], ['Red', 'Green'], handler_map = {tuple: HandlerTuple(ndivide=None)})
Run Code Online (Sandbox Code Playgroud)
然而,这样做会使图例线有点太短,无法清楚地区分实线和虚线,因此我试图找出如何在不使整个图例变大的情况下使它们更长。
从这里的文档https://matplotlib.org/stable/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D看来我应该能够通过设置 sketch_params 属性来做到这一点。我有以下内容
legLines = leg.get_lines()
pt.setp(legLines, sketch_params = (1,2,3))
Run Code Online (Sandbox Code Playgroud)
但这告诉我它必须是实数,而不是元组——与文档的建议相反。另请注意,此示例中的数字是任意的,因为我只是想了解如何使用它。
我尝试了很多不同的方法来实现这个共同的传说,这是迄今为止我所得到的最接近的。所以我只是希望有人能帮助解释我如何滥用该sketch_params属性,因为听起来我应该能够用它来指定长度。
编辑: 评论中提到,要让 sketch_params 工作,我可以简单地做
for line in …Run Code Online (Sandbox Code Playgroud)