I completely agree with most the factors you've identified, but before I suggest some additional points, I'd like to correct one of yours:
file formats that can only be read in MATLAB
Unless you're talking about some obscure format that I'm unaware of (entirely possible!), MATLAB files are readable by non-MATLAB tools. In particular, scipy.io provides flawless I/O from/to .mat files (especially since yours truly submitted a minor patch ;) ).
I mention this because it's an excellent argument for making the switch towards the scientific python stack; my Ph.D advisor only knows MATLAB, but she has become much less reluctant to work with Python since I explained that everything I did could be trivially made to interact with existing MATLAB code.
Additional (Python-centric) reasons why MATLAB remains king:
- There's what I call "battered spouse syndrome": researchers are used to the pain and suffering caused by MATLAB and wrongly assume that it's just part of the programming landscape. In other words, they don't know any better. They don't realize that there are tools that are more pleasant to use, more robust, (often) faster, more reliable, free and extensible. It's a classic case of thinking that all programming languages (eligible bachelors) are as abusive as your current tool (spouse).
- Researchers are put off by IDLE and aren't aware of such great tools as:
- IPython Notebook (this will really rock your socks if you haven't seen it yet)
- Spyder (for those seeking a MATLAB-esque graphical interface)
- People haven't seen the Pandas library in action. I know it's a bit presumptuous to claim that a single library can convert steadfast MATLAB users, but Pandas, especially when combined with the IPython notebook, makes dealing with labeled matrices downright enjoyable. It offers such things as:
- string-labeled columns and/or rows
- groupby, split & merge operations
- baked-in plotting with fine-grained control
- baked-in summary & inferential statistics
- Python has historically been quite a pain in the ass to install on windows and OSX, and most potential users are still unaware that the Anaconda distribution has all but completely solved the problem.
My reason for bringing up point
3 is more than just a shameless plug for the Pandas library. I wanted to draw your attention to the fact that Pandas manages to combine MATLAB's most sought-after features (fast numerical arrays, logical indexing, plotting & myriad 3rd party libraries) with some of the most useful features of the R language (DataFrame-like structures, summary stats, split/combine/apply operations, missing data management (e.g. fill-forward, interpolation, etc). With this library, you can essentially make the argument that you're replacing two languages for most common purposes.
And now a real shameless plug: I'm one of the moderators on Reddit's /r/pystats. Anybody trying to ditch Matlab is more than welcome around these parts ;)