当处理不同颜色的重叠高密度散射图或线图时,可以方便地实现添加剂混合方案,其中每个标记的RGB颜色加在一起以在画布中产生最终颜色.这是2D和3D渲染引擎中的常见操作.
但是,在Matplotlib中,我只发现了对alpha/opacity混合的支持.有没有迂回的方式做到这一点,还是我坚持渲染到位图,然后在一些绘画程序中混合它们?
编辑:这是一些示例代码和手动解决方案.
这将产生两个部分重叠的随机分布:
x1 = randn(1000)
y1 = randn(1000)
x2 = randn(1000) * 5
y2 = randn(1000)
scatter(x1,y1,c='b',edgecolors='none')
scatter(x2,y2,c='r',edgecolors='none')
Run Code Online (Sandbox Code Playgroud)
这将在matplotlib中产生以下内容:

正如您所看到的,有一些重叠的蓝点被红点遮挡,我们希望看到它们.通过在matplotlib中使用alpha/opacity混合,您可以:
scatter(x1,y1,c='b',edgecolors='none',alpha=0.5)
scatter(x2,y2,c='r',edgecolors='none',alpha=0.5)
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果:

但我真正想要的是以下内容:

我可以通过将每个绘图独立渲染到位图来手动完成:
xlim = plt.xlim()
ylim = plt.ylim()
scatter(x1,y1,c='b',edgecolors='none')
plt.xlim(xlim)
plt.ylim(ylim)
scatter(x2,y2,c='r',edgecolors='none')
plt.xlim(xlim)
plt.ylim(ylim)
plt.savefig(r'scatter_blue.png',transparent=True)
plt.savefig(r'scatter_red.png',transparent=True)
Run Code Online (Sandbox Code Playgroud)
这给了我以下图片:

你可以做的是在Paint.NET/PhotoShop/gimp中将它们作为独立的层加载,只是添加它们.
现在理想的是能够在Matplotlib中以编程方式执行此操作,因为我将处理数百个这些!
该问题专门与TortoiseGit Windows客户端有关。我有一台不再使用的计算机,现在必须将该计算机不格式化就转移给另一个程序员。
奇怪的是,我似乎无法在此计算机上重置TortoiseGit凭据。全局设置中显然没有设置凭据帮助器。实际上,这台计算机上的Windows凭据管理器服务似乎已被永久禁用。我已经更改了所有本地和全局配置设置,以免根本不提及我的Git用户名,但是仍然可以将来自此机器的提交推送到我的所有GitHub远程服务器上。
关于设置和保存凭据,存在一些堆栈溢出问题。我要完全相反。
我什至不记得曾经尝试过在这台特定的计算机中保存凭据,这是我很少做的事情,而且我很少使用这台计算机。
我一直难以理解System.Drawing命名空间中哪些确切的对象实际上对系统总GDI对象计数有贡献.例如,Matrix对象计数?GraphicsPath?Pen?
为了测试这个,我在Form初始化时运行了以下代码.
public partial class Form1 : Form
{
Timer timer = new Timer();
List<Pen> pens = new List<Pen>();
public Form1()
{
InitializeComponent();
var r = new Random();
for (int i = 0; i < 1000; i++)
{
var p = new Pen(
Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)),
(float)r.NextDouble() * 10);
pens.Add(p);
}
timer.Interval = 30;
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
panel1.Invalidate();
}
private void panel1_Paint(object …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Visual Studio 2017迁移库项目以支持.NET Standard 1.1.
我希望将该项目作为单个NuGet包发布,该包可以同时针对.NET Framework 4.5+和.NET Core,UWP等.
但是,当我尝试在.NET Framework项目中安装生成的包时,会生成包含.NET标准中定义的所有包的大量包依赖关系列表(请参阅下文):
据我所知,这些都是作为.NET Standard 1.1规范的一部分定义的程序集.但是,我的特定项目实际上只需要它们中的一小部分,并且对于在项目中安装包的任何人来说,这种依赖性列表将非常混乱.
我试图按照类似问题的答案,其中建议是更改项目规范以仅引用项目所需的确切依赖项.
但是,答案是在旧的project.json格式的上下文中,现在已经被VS 2017中的新.csproj格式所取代.我试图通过删除<TargetFramework>指令删除对.NET Standard 1.1元数据包的依赖,但我只是设法打破了构建,无法找到任何方法专门添加所需的依赖项.
将库迁移到.NET Standard以实现最大平台兼容性的承诺极具吸引力,但建议依赖性的方法是什么,以便针对"经典".NET Framework的项目找不到所有这些依赖项"污染"的项目?
在Visual Studio 2015之前,将项目设置为自动生成NuGet包非常简单.具体来说,你做了:
<BuildPackage>为true就是这样!
但是,从VS 2015开始,已删除MSBuild集成的程序包还原,并替换为新的自动程序包还原.虽然这些都是好消息,但似乎将build属性设置<BuildPackage>为true不再触发自动包构建.
这是功能的重大突破!有没有办法在不使用后期构建事件的情况下设置NuGet的自动构建?具体来说,我正在寻找一个MSBuild解决方案,因为它构成了我的构建工作流程的支柱.
我刚刚将一些系统升级到Windows 10 Creators Update,我注意到windows窗体PropertyGrid控件将其标题和条形边距的默认视觉样式更改为深灰色,如下所示:
由于意外的视觉变化大多发生,用户不满意.有没有办法恢复到旧的默认值或可能覆盖默认样式?
有人可以解释一下这个非常奇怪的观察吗?
我一直试图从IronPython内部调用Rx扩展方法,结果证明它根本不可能.我把它归结为这个简单的例子:
import clr
clr.AddReference("System.Core")
from System.Linq import Enumerable
def process(value):
return Enumerable.Select(value, lambda x:x)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们从正常的LINQ开始.如果我process使用数组或任何其他IEnumerable对象从我的托管环境调用该函数,它的工作完全正常.
那么我试着简单地替换引用以使用Observable扩展方法,如下所示:
import clr
clr.AddReference("System.Reactive.Linq")
from System.Reactive.Linq import Observable
def process(value):
return Observable.Select(value, lambda x:x)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果我process用一个IObservable对象调用该函数,则调用崩溃时会出现一条丑陋的错误消息:
expected IObservable[object], got Select[int, int]
有没有人遇到这样的事情?我错过了什么吗?是否有一些特殊情况黑客可以使缺少的Enumerablelambda代理工作Observable?我不得不承认我在这里完全不知所措.
顺便说一句,正如一个完整性检查,以下示例正常工作:
import clr
clr.AddReference("System.Reactive.Linq")
from System.Reactive.Linq import Observable
def process(value):
return Observable.Sum(value)
Run Code Online (Sandbox Code Playgroud)
我想把它留在那里只是为了清楚问题确实在方法调用中Observable.Select.
在找到Lazy<T>类型之前,我使用以下模式来实现全局单例:
class DataModel
{
public static XmlSerializer Serializer
{
get { return SerializerFactory.instance; }
}
static class SerializerFactory
{
internal static readonly XmlSerializer instance =
new XmlSerializer(typeof(DataModel));
}
}
Run Code Online (Sandbox Code Playgroud)
此模式具有以下优点:
最近我发现了很多帖子,建议Lazy<T>实现类似的单例访问模式.Lazy<T>(或LazyInitializer)是否会为此实施带来任何好处?
c# ×3
winforms ×2
.net ×1
blending ×1
credentials ×1
gdi+ ×1
git ×1
ironpython ×1
linq ×1
matplotlib ×1
msbuild ×1
nuget ×1
propertygrid ×1
python ×1
reactivex ×1
singleton ×1
tortoisegit ×1
windows ×1