我正在使用 python 创建一堆我的数据图,然后 Inkscape 在主图的面板中布置单独的图和原理图。我还添加了一些额外的元素,例如面板名称和标题。
每次我修改 Python 代码中的某些内容时,我都必须手动将 svg/pdf 图粘贴到 Inkscape 中。我注意到,如果我将绘图创建为光栅图像而不是矢量,我可以在 Inkscape 文档中插入一个链接,并且每次我在 python 中重新生成绘图时都会更新图形面板,这是惊人的!
目前我正在使用这种具有高 DPI 的方法,但理想情况下,我想插入一个指向 svg/pdf 文件的链接,以便整个图形是一个矢量,而不是一个高 DPI、大尺寸的光栅。我已经看到可以在 Adobe Illustrator .ai 文件中以这种方式包含 pdf(不认为 svgs 工作),我想知道是否有任何方法可以在 Inkscape 中做到这一点?
当我插入图像链接时,Inkscape 在 svg 中创建一个类似于此的标签
<image
sodipodi:absref="path/to/image.png"
xlink:href="./image.png"
y="14.014872"
x="5.9285898"
id="image12160"
preserveAspectRatio="none"
height="441.91879"
width="466.55328" />
Run Code Online (Sandbox Code Playgroud)
我可以修改路径以指向 svg 文件,但 Inkscape 会自动将 svg 转换为低分辨率光栅。如果我将路径更改为 pdf,则会出现错误。有什么我可以在 svg 代码中修改的东西,以便能够链接 pdf/svg 文件并让它们在 Inkscape 中呈现为矢量文件?
对于下面的示例,我想使用绿色配色方案进行导出,使用红色方案进行导入。当我单独创建图表时,一切都很好,他们得到了我分配给他们的配色方案。然而,当我连接图表时,它们都得到了红色方案。
import pandas as pd
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]
exports = {'fruits' : fruits,
'2015' : [2, 1, 4, 3, 2, 4],
'2016' : [5, 3, 4, 2, 4, 6],
'2017' : [3, 2, 4, 4, 5, 3]}
imports = {'fruits' : fruits,
'2015' : [-1, 0, -1, -3, -2, -1],
'2016' : [-2, -1, -3, -1, -2, -2],
'2017' : [-1, -2, -1, 0, -2, -2]}
df_exp = pd.DataFrame(exports)
df_imp …Run Code Online (Sandbox Code Playgroud) 我想为 x 轴添加一个标签,为 y 轴添加一个标签。
此外,将颜色栏标题与颜色栏留出更多空间的提示将不胜感激。
我已经标记了可以使用帮助的地方 # <---- Help Please!
# this chunk seems to be necessary for plotting in my virtualenv.
import matplotlib
matplotlib.use('TkAgg')
% matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import itertools
import seaborn as sns
import platform
print("python version {}".format(platform.python_version()))
# python version 3.5.1
print("seaborn version {}".format(sns.__version__))
# seaborn version 0.7.0
methods=['method 1', 'method2', 'method 3', 'method 4']
times = range(0, 100, 10)
data = pd.DataFrame(list(
itertools.product(methods, times, …Run Code Online (Sandbox Code Playgroud) 我有点困惑,为什么在 Pandas 数据框中引用列的语法会根据调用的方法而有所不同。采用以下示例方法链
import pandas as pd
iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
iris.columns = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']
(iris
.loc[:, ['SepalLength', 'PetalWidth', 'Species']]
.where(iris['SepalLength'] > 4.6)
.assign(PetalWidthx2 = lambda x_iris: x_iris['PetalWidth'] * 2)
.groupby('Species')
.agg({'SepalLength': 'mean', 'PetalWidthx2': 'std'}))
Run Code Online (Sandbox Code Playgroud)
这里,有三种不同的语法用于引用 iris 数据框中的列:
loc, groupby, 和agg所有人都知道字符串指的是数据框中的一列。where 需要显式引用数据框。assign方法中显式引用数据帧将导致对原始 iris 数据帧执行操作,而不是已通过调用loc和修改的副本where。这里,lambda需要参考修改后的数据帧副本的当前状态。除了上述之外,还有query,它将整个方法输入作为字符串:iris.query('SepalLength > 4.6'),但这里的熊猫文档明确指出这是针对特殊用例的:
query() 的一个用例是当您有一组 DataFrame 对象时,这些对象具有共同的列名(或索引级别/名称)的子集。您可以将相同的查询传递给两个框架,而无需指定您对查询感兴趣的框架
为了举例说明我所说的一致数据框列引用语法的含义,可以与 R-package 进行比较dplyr,其中数据框中的列对于所有管道函数调用都使用相同的语法进行引用。
library(dplyr)
# The iris …Run Code Online (Sandbox Code Playgroud) 我可以在交互式 IPython 控制台中从 emacs 更改为 vi 绑定,方法是将以下内容添加到~/.ipython/profile_deafult/ipython_config.py:
c.TerminalInteractiveShell.editing_mode = 'vi'
Run Code Online (Sandbox Code Playgroud)
目前,光标始终为工字梁 ( |)。有没有一种方法可以让光标在 vi 的正常模式下将形状更改为块,然后在插入模式下返回到 I 型梁?
我的终端模拟器(终结器,基于 gnome-terminal)支持在光标格式之间切换,因为我可以通过将以下内容添加到我的~./zshrc(来自 Unix SE)来启用 zsh 中的行为:
bindkey -v
# Remove delay when entering normal mode (vi)
KEYTIMEOUT=5
# Change cursor shape for different vi modes.
function zle-keymap-select {
if [[ $KEYMAP == vicmd ]] || [[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ $KEYMAP == main ]] || [[ $KEYMAP == viins …Run Code Online (Sandbox Code Playgroud) 在 Jupyter notebook 中,我想在编辑Markdown 单元格时使用常规的 Ubuntu 字体,而在编辑代码单元格时使用UbuntuMono。我可以通过如下编辑同时更改这两种单元格类型的字体.jupyter/custom/custom.css:
.CodeMirror pre {
font-family: "Ubuntu Mono", monospace;
font-size: 14pt;
}
Run Code Online (Sandbox Code Playgroud)
我还可以更改 Markdown 代码单元格中标题的格式:
.cm-header {
font-size: 110%;
font-family: "Ubuntu";
}
Run Code Online (Sandbox Code Playgroud)
以及呈现时文本的外观(在执行降价单元后):
div.text_cell_render {
font-family: "Ubuntu";
font-size: 12pt;
}
Run Code Online (Sandbox Code Playgroud)
但是,我不明白我可以使用哪些 css 类来区分编辑模式下 Markdown 单元格中的代码单元格和段落/正文文本。我在 Firefox 中尝试了对象检查器,但两种单元格类型的输入文本显示为相同的跨度标签和 css 类。我已经尝试了这里列出的许多组合,但似乎我找不到合适的组合,有什么想法吗?
例如\alpha,在 Jupyter Notebooks 中,您可以键入并点击 Tab 键并将\alpha更改变为 ?。这是一个非常酷的功能。不幸的是,它在 jupyter-lab 编辑器中不起作用。有什么理由不工作吗?还是我需要在某处设置首选项?
我在 Altair 中生成折线图。我想控制哪些行位于行堆栈的“顶部”。在我的示例中,我希望红线位于顶部(最新日期),然后下降到黄色(最旧日期)位于底部。
我试图用sortof 的参数来控制它alt.Color ,但无论sort='ascending'或sort='descending'线重叠的顺序都不会改变。
我怎样才能控制这个?希望我可以在不对源数据帧本身进行排序的情况下完成此操作。
data = [{'review_date': dt.date(year=2022, month=2, day=24), 'a':19, 'b':17, 'c':12, 'd':8},
{'review_date': dt.date(year=2022, month=2, day=23), 'a':20, 'b':16, 'c':14, 'd':8},
{'review_date': dt.date(year=2022, month=2, day=22), 'a':22, 'b':16, 'c':14, 'd':10},
{'review_date': dt.date(year=2022, month=2, day=21), 'a':14, 'b':13, 'c':12, 'd':5},]
df = pd.DataFrame(data).melt(id_vars=['review_date'], value_name='price', var_name='contract')
df.review_date = pd.to_datetime(df.review_date)
domain = df.review_date.unique()
range_ = ['red', 'blue', 'gray', 'yellow']
alt.Chart(df, title='foo').mark_line().encode(
x=alt.X('contract:N'),
y=alt.Y('price:Q',scale=alt.Scale(zero=False)),
color=alt.Color('review_date:O', sort="ascending", scale=alt.Scale(domain=domain, range=range_) )
).interactive()
Run Code Online (Sandbox Code Playgroud) 我正在尝试更改 Jekyll 中博客文章标题的大小写,而不必每次都在 yaml 标题字段中键入它。默认情况下,jekyll 转换文件2016-02-22-my-blog-title为标题“我的博客标题”,我希望它是“我的博客标题”。
我注意到我可以通过修改_layouts/post.html和更改行来实现此行为
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
Run Code Online (Sandbox Code Playgroud)
到
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title | downcase | capitalize}}</a>
Run Code Online (Sandbox Code Playgroud)
但是,这使得无法在需要时通过向 yaml 字段添加自定义标题来覆盖大小写规则。例如,不可能将不是标题第一个单词的专有名词大写。是否可以更改从文件名生成默认标题的方式,同时在 yaml 中指定标题时仍然允许覆盖它?
我正在创建一个包含大约一百个子图/轴的图形,每个子图/轴都有几千个数据点。目前,我正在循环遍历每个子图并用于plt.scatter放置点。然而,这是相当慢的。是否可以使用多个 CPU 来加速绘图,通过将工作分配给每个子图一个核心或在单个子图中绘制数据点?
到目前为止,我尝试使用joblib并行进程来创建子图,但它不是在同一图中创建新的子图,而是为每个子图生成一个新图。我尝试过后端PDF、、Qt5Agg和Agg。这是我的代码的简化示例。
import matplotlib as mpl
mpl.use('PDF')
import seaborn as sns
import matplotlib.pyplot as plt
from joblib import Parallel, delayed
def plotter(name, df, ax):
ax.scatter(df['petal_length'], df['sepal_length'])
iris = sns.load_dataset('iris')
fig, axes = plt.subplots(3,1)
Parallel(n_jobs=2)(delayed(plotter)
(species_name, species_df, ax)
for (species_name, species_df), ax in zip(iris.groupby('species'), axes.ravel()))
fig.savefig('test.pdf')
Run Code Online (Sandbox Code Playgroud)
设置n_jobs=1有效后,所有点都将绘制在同一个图中。然而,将其增加到一以上会创建四个数字:我启动时使用一个数字plt.subplots,然后每次ax.scatter调用一个数字。
由于我将轴从第一个图形传递到plotter,所以我不确定如何/为什么创建附加图形。matplotlib 中是否有一些后备措施,如果指定的图形被另一个绘图过程“锁定”,则会导致自动创建新图形?
任何关于如何改进我当前的方法或通过替代方法实现加速的建议都将受到赞赏。
python matplotlib multiprocessing joblib python-multiprocessing